我有一个功能,在功能上,我有两个变量相同的模式,变量内存地址
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
现在,我们从第e输出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个字节,但顺序相同。我的qs是,正如我已经颠倒了变量声明,为什么没有在gcc中将变量的地址顺序颠倒过来。我正在阅读一本书,说地址应该颠倒过来,但是这不会发生在我的电脑中。所以我很困惑。
强制没有优化也许? '#pragma OPTIMIZE OFF' – Leonardo
@Leonardo:一个非常糟糕的想法。即使它在这种情况下起作用,也是非常具有误导性的,因为该语言不能保证编译器分配自动变量的位置。 –