堆栈存储器中的变量顺序和存储器寻址

时间:2012-12-02 07:11:15

标签: c gdb stack

  

可能重复:
  Order of local variable allocation on the stack

(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中已经阅读了这个答案,但我想知道是否有人对这个问题有明确的解释。

0 个答案:

没有答案