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