我想澄清我关于内存分配的思维图。
假设我有以下Array:
int arr [] = {1,2,3};假设每个整数将占用内存中的4字节。
这样,整数的内存地址可以是:
HHH01 HHH05 HHH09
arr的内存块会是每个整数的内存块的超集吗?
发布于 2020-02-04 19:47:18
严格地说,IIRC,您的问题的答案是未定义的,这一点很重要,因为深入研究未定义的行为会导致一些最难和最模糊的bug跟踪。指针和数组不一定非得以CPP标准中的任何特定方式在内存中映射。只要它们能够正确地执行必要的算法来查找和取消引用适当的元素,等等.除此之外的任何东西都应该被安全地抽象化。
这么说..。我认为这个问题的答案对大多数人来说(如果不是全部的话)。实际目的是你的理解是正确的。如果您要cout << &(arr[0]);cout << &(arr[2]),您将在我使用过的任何编译器中得到您期望的地址,并且分配的内存量将是您所期望的数量。执行cout << &(arr[3])甚至会为您提供一个有效的地址,尽管实际存储在arr[3]中的数据将是垃圾。唯一需要注意的是,不同的编译器和操作系统可以为这些元素提供不同的大小和对齐。如果您要检查int的大小,它可能会告诉您它是2个字节,但是当您开始查看由编译器输出的数组中元素的地址时,它们有一个4字节的间距。
最后,虽然从学术角度来看这很有趣.基本上应不惜一切代价避免实际使用它。如果您开始尝试手动访问内存位置,它很可能会回来咬您或其他必须在某个地方维护您的代码的人。
https://stackoverflow.com/questions/60062228
复制相似问题