2014-03-25 48 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」的地址通過8位我應該在那裏找到'h'。但'h'的地址是只有4位更遠。我在這裏錯過了什麼?

沒有意識到這些是Wchar_t(寬字符)。

+1

它是4 *八位位組/字節*進一步,而不是位。 – user2864740

+0

所以我仍然有點困惑。首先,這表明字符被存儲在4個字節(這是真的,這些不是字符,而是wchar_t,即寬字符)。我將編輯帖子以反映這一點。但我也有一個問題。這是否意味着在每個存儲器地址都存儲了整個字節的內存?即0x7fffffff9d30引用整個字節,而0x7fffffff9d31引用完全不同的字節? – letowianka

+0

內存地址不包括*在給定位置存儲了什麼*對象(或多少數據)。編譯器(例如來自'wchar_t'類型)並在編譯時生成適當的偏移量*。同樣,在所述地址處的數據的使用已經被編譯成發出的目標指令。 – user2864740

回答

0

FWIW,在這種情況下,您可能會喜歡使用「x」命令來轉儲內存。這避免了由類型和操作員造成的任何可能的混淆。