(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)
对严格单整数变量的排序似乎没有出现这个问题。如果切换整数声明的顺序,则最早声明的堆栈帧中将具有更高的内存地址。这里关注的是为什么字符数组会出现这种情况。我在another post中已经阅读了这个答案,但我想知道是否有人对这个问题有明确的解释。