2014-03-25 2 views
0

다음 gdb 출력과 매우 혼동 스럽습니다. 텍스트 파일을 처리하는 프로그램을 디버깅하고 있습니다.메모리 주소에 몇 바이트가 저장됩니까?

는 "을": 파일의 첫 번째 단어는 다음과 같이 "(가)"및 GDB 출력이 보이는 것입니다

(gdb) p *(char*)0x7fffffff9d30 
$12 = 84 'T' 

(gdb) p *(char*)0x7fffffff9d34 
$13 = 104 'h' 

(gdb) p *(char*)0x7fffffff9d38 
$14 = 101 'e' 

문자 그래서 난 'T'의 주소를 증가하는 경우로, 1 바이트 8 비트 나는 거기에서 'h'를 발견해야한다. 그러나 'h'의 주소는 이고 4 비트는뿐입니다. 내가 여기서 무엇을 놓치고 있니?

Wchar_t (와이드 문자)인지 알지 못했습니다.

+1

비트가 아닌 4 * 옥텟/바이트 *입니다. – user2864740

+0

그래서 저는 아직도 약간 혼란 스럽습니다. 첫 번째로 문자가 4 바이트로 저장된다는 것을 나타냅니다 (사실이 문자는 문자가 아니라 wchar_t, 즉 와이드 문자입니다). 나는 그것을 반영하기 위해 글을 편집 할 것이다. 그러나 나는 또한 질문이있다. 즉, 각 메모리 주소에 전체 바이트의 메모리가 저장되어 있습니까? 즉 0x7fffffff9d30은 전체 바이트를 참조하고 0x7fffffff9d31은 완전히 다른 바이트를 참조합니까? – letowianka

+0

메모리 주소에는 주어진 위치에 * what * object (또는 얼마나 많은 데이터)가 저장되어 있지 않습니다. 컴파일러는 (예를 들어,'wchar_t' 타입으로부터) 그것을 컴파일 할 때 적절한 오프셋을 생성합니다. 마찬가지로, 상기 어드레스에서의 데이터의 사용은 방출 된 타겟 명령으로 컴파일되었다. – user2864740

답변

0

FWIW와 같은 상황에서는 "x"명령을 사용하여 메모리를 덤프 할 수 있습니다. 이렇게하면 유형 및 운영자로 인해 발생할 수있는 혼란을 피할 수 있습니다.

관련 문제