堆栈中的变量是否连续?

时间:2014-01-22 16:06:56

标签: c++ variables contiguous

我想知道下面代码中的数组a和b是否在内存中是连续的:

int main() {
    int a[3];
    int b[3];

    return 0;
}
对于a[0]

a[1]a[2]b应该是连续的且相同,但是有关b将在何处分配的任何保证到a

如果没有,有没有办法迫使ab相互毗邻?即,它们被分配在堆栈中的彼此旁边。

2 个答案:

答案 0 :(得分:16)

,C ++不保证这些变量在内存中的位置。内存中的一个或两个甚至可能 (例如,如果它们已被优化)!

为了获得两者之间的相对排序,至少,你必须将它们封装到structclass中,即使这样,也需要考虑填充/对齐。

答案 1 :(得分:4)

无法保证各个变量在堆栈中彼此相邻。

在你的例子中,你可以通过这样做来“欺骗”并模拟你正在寻找的东西:

int main() 
{
    int buffer[6]
    int *a = buffer;
    int *b = buffer+3;

    return 0;
}

现在,当您写信至a[4]时,您实际上会写信给b[0]