c++ - 整数必须存储在连续的内存地址中吗?

标签 c++ memory memory-address

首先,我说的是 32 位架构。我的教授给我们举了一个例子,说明如何存储 C/C++ 32 位整数的地址,地址为 0A0B0C0D,整数的第一个字节存储在 0x0A,第二个在 0x0B,第三个在 0x0C,第四个在 0x0D。但是,我在 C++ 中尝试了以下代码:

#include <iostream>
int main(){
  int a = 5;
  std::cout << &a;
}

我得到了 0x7fffba2e6c3c。然而,这看起来不像教授给我们的例子那样字节是连续的。我的问题是,为什么编译器不将整数的 4 个字节存储在连续的内存地址中,而是将整数中的每个字节存储在不同的地址中?

最佳答案

and have an address as 0A0B0C0D with the first byte of the integer being stored at 0x0A

这里似乎有些困惑。

如果一个整数的第一个字节存放在0x0A,那么整个整数的地址就是0x0A。 0A0B0C0D 似乎是作为该整数一部分的字节地址的某种串联。

或者相反,如果整数的地址是0x0A0B0C0D,那么第一个字节的地址也是0x0A0B0C0D,第二个是0x0A0B0C0E等等。

I got 0x7fffba2e6c3c. However, this doesn't look like the bytes are contiguous

您已经打印了整数的地址。您无法从地址判断该地址处的对象是否连续。例如,如果您像教授示例中那样得到 0x0A,您将如何确定后续字节是或不是 0x0B?

你不能从地址得出这样的结论,但你只需要假设相邻。

Is it a must that an integer must be stored in contiguous memory addresses?

是的。所有对象在内存中都是连续的。 (请注意,一个对象可以包含单独对象的地址,这些地址不一定相对于持有指针的对象连续存储。因此,例如,链表对象不会连续存储列表的元素,但每个节点列表本身是连续的)。

关于c++ - 整数必须存储在连续的内存地址中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42608320/

相关文章:

c - c中malloc的多个单行赋值

使用 close() 关闭后 Java Clip(声音/音频)内存泄漏

c++ - 如果我知道它的地址,我能以某种方式访问​​它吗?

arrays - C 中将字符串拆分为字母和数字的函数

c++ - 使用 OpenCV 检测视频中的基本变化

c++ - 读取 vector<Mat> 或 Video ? (Opencv 和 C++)

python - pandas 统计函数和 boost::accumulators 之间的区别

c++ - 解释以下C++代码部分

c - C 中的 srand - 只需重复一次

python - Python中获取内存地址,判断是列表还是字典并更新其内容