1
如果我有以下代碼:爲什麼存儲在寄存器中的數據有內存地址?
-(int)number {
int i = 3;
return i;
}
我可以得到整數i的內存地址,通過做&我。 (暫停時發言權斷點上的返回線)
然而相應的組件(ARM)將簡單爲:
MOV R0, #3
無處是所需的內存(除了以存儲指令),所以如何i
有一個內存地址?
如果我有以下代碼:爲什麼存儲在寄存器中的數據有內存地址?
-(int)number {
int i = 3;
return i;
}
我可以得到整數i的內存地址,通過做&我。 (暫停時發言權斷點上的返回線)
然而相應的組件(ARM)將簡單爲:
MOV R0, #3
無處是所需的內存(除了以存儲指令),所以如何i
有一個內存地址?
該代碼可能不需要使用內存,但這並不意味着它不使用內存。編譯器可以實現它,但它是想要的。沒有優化,這意味着變量可能全部存儲在內存中,無論它們是否需要。例如,考慮這個非常基本的程序:
int main() {
int i = 0;
return i;
}
隨着優化禁用(這是默認設置),蘋果鐺4.0給了我以下組件:
_main:
sub sp, sp, #4
movw r0, #0
str r0, [sp]
add sp, sp, #4
bx lr
隨着優化啓用,我得到一個更簡單的程序:
_main:
mov r0, #0
bx lr
正如你所看到的,沒有優化的版本存儲0記憶,但優化的版本沒有。如果您要在調試器中使用優化版本,則無法爲您提供地址i
。我實際上得到了一個錯誤,i
是未定義的,因爲它已經完全優化。
好奇。地址是什麼?在程序的上下文中它是一個有效的地址嗎?另外,調試器是否顯示反彙編或通過單獨的工具獲取? – 2013-03-06 01:28:26