可能重复:
堆栈上的局部变量分配顺序
(x86_64 Linux 上的 C 程序)我试图了解变量分配给堆栈内存的方式。据我了解,堆栈帧中的变量向较低的内存地址移动。下面的程序显示了这一点。
int main() {
int i = 6;
char buffer[8];
return 0;
}
程序编译为:gcc -g prog.c
调试显示:
(gdb) x/x &i
0x7fffffffe04c: 0x00000006
(gdb) x/x buffer
0x7fffffffe040: (random data)
字符数组的内存地址低于整数 i 变量。我的问题是,当声明的顺序如下所示颠倒时,整数变量 i 仍然位于大于字符数组的内存地址处?
int main() {
char buffer[8];
int i = 6;
return 0;
}
(gdb) x/x &i
0x7fffffffe04c: 0x00000006
(gdb) x/x buffer
0x7fffffffe040: (random data)
对于严格地说单个整数变量的排序,似乎不会出现此问题。如果交换整数声明的顺序,最早声明的将在堆栈帧中具有更高的内存地址。这里的问题是为什么字符数组会发生这种情况。我已经在另一篇文章中阅读了这个答案,但我想知道是否有人对此有明确的解释。