【发布时间】:2017-03-05 12:24:55
【问题描述】:
首先,我说的是 32 位架构。我的教授给我们举了一个例子,说明如何存储 C/C++ 32 位整数的地址,地址为0A0B0C0D,整数的第一个字节存储在0x0A,第二个字节存储在0x0B ,第三个在0x0C,第四个在0x0D。但是,我在 C++ 中尝试了以下代码:
#include <iostream>
int main(){
int a = 5;
std::cout << &a;
}
我得到了0x7fffba2e6c3c。然而,这看起来不像教授给我们的例子那样字节是连续的。我的问题是,为什么编译器不将整数的 4 个字节存储在连续的内存地址中,而不是将整数的每个字节存储在不同的地址中?
【问题讨论】:
-
0A0B0C0D是完整地址。第一个字节不存储在0A。它存储在0A0B0C0D。 -
@tkausl 第一个字节更有可能在 0x0A..
-
要么你的教授选择了一个特别糟糕的例子,要么他们的意思是
0A0B0C0D是整数的值,存储在0A。
标签: c++ memory memory-address