我明白我没有说清楚.我的怀疑我可以总结一下:
在可执行文件(机器代码)中如何表示“变量”?他们是静态内存地址吗?编译器是否给每个人一个特定的“名称”(或只是保留你给他们的一个)?
用代码表示:
int x=5; //Bunch of code cin>>y; cout<<x+1;
每个机器中的程序如何知道哪个地址将保持值5,以保持输入的值,将其添加到现在保存的值中,最后打印相同的值.
–João
解决方法
这是一个简单的C程序:
int main() { int a = 5; int b = 7; int c = a + b; return 0; }
如果您在Linux下使用gcc -m32 -S -O0 -o main.s main.c编译,那么您将得到这样的结果
.file "main.c" .text .globl main .type main,@function main: .LFB0: /* %ebp is a Base Pointer Register */ pushl %ebp movl %esp,%ebp /* Here we reserve space for our variables */ subl $16,%esp /* a's address is %ebp - 4 */ movl $5,-4(%ebp) /* b's address is %ebp - 8 */ movl $7,-8(%ebp) /* a + b */ movl -8(%ebp),%eax movl -4(%ebp),%edx addl %edx,%eax /* c's address is %ebp - 12 */ movl %eax,-12(%ebp) /* return 0 */ movl $0,%eax leave ret
可以看出,在这种情况下,变量的地址被计算为函数的基指针的偏移量.如果启用优化,变量的值可能存储在寄存器中.