我对内存布局分配有些困惑,假设我们有:
int flag = 0;
char array[10];
在内存栈中,数组位于标志位之上。
(gdb) x/x array : 0xbffff4bc
(gdb) x/x flag : 0xbffff4cc
然而,假设我们把这些行反过来:
char array[10];
int flag = 0;
然而,分配内存的方式仍然相同。
(gdb) x/x array : 0xbffff4bc
(gdb) x/x flag : 0xbffff4cc
为什么分配操作没有改变?第二个选项的标志不应该在栈中的数组之上吗?即使我使用
-fno-stack-protector
编译,为什么内存被分配给栈中整数上方的数组?
这是否正确?我正在运行gcc 4.7.2 Debian。编辑
我刚刚发现了同样问题的帖子memory-allocation-issue-buffer-overflow-attack。但是,在阅读第一个答案时,在评论中指出,使用
-fno-stack-protector
应该解决该问题(按声明顺序顺序地分配内存)。但在我的情况下无法解决问题。有任何建议吗?