【发布时间】:2013-11-25 03:22:01
【问题描述】:
我有一个函数,在函数中,我有两个变量,
int auth_flag = 0;
char buffer[16];
现在这里是gdb命令x/s buffer的输出
0xffffd01c: "\201\203\004\b\344\203\373\367\002"
和print &auth_flag的输出
$1 = (int *) 0xffffd018
现在,我们从输出中看到,auth_flag 的位置是缓冲区之前的 4 个字节。现在,如果我这样声明变量
char buffer[16];
int auth_flag = 0;
前面命令的输出是
0xffffd00c: "\201\203\004\b\344\203\373\367\002" and
$1 = (int *) 0xffffd008
同样的事情。落后 100 个字节,但顺序相同。我的问题是,由于我已经反转了变量声明,为什么在 gcc 中变量的地址顺序没有反转。我正在读一本书,据说地址应该颠倒,但这并没有发生在我的电脑上。所以我真的很困惑。
【问题讨论】:
-
强制不优化可能吗?
#pragma OPTIMIZE OFF -
@Leonardo:一个非常糟糕的想法。即使它在这种情况下有效,它也具有很大的误导性,因为该语言不能保证编译器在哪里分配自动变量。