我有一個功能,在功能上,我有兩個變量相同的模式,變量內存地址
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:一個非常糟糕的想法。即使它在這種情況下起作用,也是非常具有誤導性的,因爲該語言不能保證編譯器分配自動變量的位置。 –