我想知道下面代码中的数组a和b是否在内存中是连续的:
int main() {
int a[3];
int b[3];
return 0;
}
对于a[0]
, a[1]
,a[2]
和b
应该是连续的且相同,但是有关b
将在何处分配的任何保证到a
?
如果没有,有没有办法迫使a
和b
相互毗邻?即,它们被分配在堆栈中的彼此旁边。
答案 0 :(得分:16)
否,C ++不保证这些变量在内存中的位置。内存中的一个或两个甚至可能 (例如,如果它们已被优化)!
为了获得两者之间的相对排序,至少,你必须将它们封装到struct
或class
中,即使这样,也需要考虑填充/对齐。
答案 1 :(得分:4)
无法保证各个变量在堆栈中彼此相邻。
在你的例子中,你可以通过这样做来“欺骗”并模拟你正在寻找的东西:
int main()
{
int buffer[6]
int *a = buffer;
int *b = buffer+3;
return 0;
}
现在,当您写信至a[4]
时,您实际上会写信给b[0]
。