假设我们有以下简单的C++代码:
#include <iostream>
int main(){
int a = 5;
}
由于每个存储单元大小为8位
,而整数大小为32位
,因此我认为a
的内存结构应该是这样的:
0xa 0xb 0xc 0xd
00000000 00000000 00000000 00000101
其中0xa、0xb、0xc、0xd是示例内存地址。
1) &a
指向0xa
还是0xd
?
2) 如果我使用GDB并使用x
获取实际的内存地址,我将得到以下结果:
(gdb) p a
$7 = 5
(gdb) p &a
$8 = (int *) 0x7ffeefbffac8
(gdb) x/bt 0x7ffeefbffac8
0x7ffeefbffac8: 00000101
(gdb) x/bt 0x7ffeefbffac8-1
0x7ffeefbffac7: 00000000
(gdb) x/bt 0x7ffeefbffac8-2
0x7ffeefbffac6: 00000000
(gdb) x/bt 0x7ffeefbffac8-3
0x7ffeefbffac5: 01111111
(gdb)
为什么0x7ffeefbffac8-3
的值是01111111
而不是00000000
?这个地址不是等于我们样例中的0xa
吗?涉及到IT技术相关内容。
&a
指向0xd
吗? - Joe