Memory 一个内存地址存储了多少字节?

Memory 一个内存地址存储了多少字节?,memory,gdb,character,byte,Memory,Gdb,Character,Byte,我对以下gdb输出感到非常困惑。我正在调试一个处理文本文件的程序。文件中的第一个字是“The”,gdb输出如下所示: “报告”: 一个字符是一个字节,所以当我将'T'的地址增加8位时,我应该在那里找到'h'。但是‘h’的地址只比它远4位。我错过了什么 没有意识到这些是Wchar_t(宽字符)。FWIW,在这种情况下,您可能希望使用“x”命令转储内存。这避免了由类型和运算符引起的任何可能的混淆。它是4个八位字节/字节,而不是位。所以我仍然有点困惑。首先,这表明字符存储在4个字节中(没错,这些不是字

我对以下gdb输出感到非常困惑。我正在调试一个处理文本文件的程序。文件中的第一个字是“The”,gdb输出如下所示:

“报告”:

一个字符是一个字节,所以当我将'T'的地址增加8位时,我应该在那里找到'h'。但是‘h’的地址只比它远4位。我错过了什么


没有意识到这些是Wchar_t(宽字符)。

FWIW,在这种情况下,您可能希望使用“x”命令转储内存。这避免了由类型和运算符引起的任何可能的混淆。

它是4个八位字节/字节,而不是位。所以我仍然有点困惑。首先,这表明字符存储在4个字节中(没错,这些不是字符,而是wchar__t,即宽字符)。我将编辑这篇文章以反映这一点。但我也有一个问题。这是否意味着在每个内存地址都存储了整个字节的内存?i、 e.0x7FFFFF9D30引用整个字节,0x7FFFFF9D31引用完全不同的字节?内存地址不包括在给定位置存储的对象(或数据量)。编译器执行(例如,从
wchar\u t
类型)并在编译时生成适当的偏移量。类似地,上述地址的数据使用情况已编译成发出的目标指令(我不确定magic GDB在将所有内容拼接在一起时做了什么,或者它需要什么)
(gdb) p *(char*)0x7fffffff9d30
$12 = 84 'T'

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

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