C编译器如何编译变量名?
发布时间:2020-12-16 05:29:58 所属栏目:百科 来源:网络整理
导读:我明白我没有说清楚.我的怀疑我可以总结一下: 在可执行文件(机器代码)中如何表示“变量”?他们是静态内存地址吗?编译器是否给每个人一个特定的“名称”(或只是保留你给他们的一个)? 用代码表示: int x=5; //Bunch of code ciny; coutx+1; 每个机器中的
我明白我没有说清楚.我的怀疑我可以总结一下:
在可执行文件(机器代码)中如何表示“变量”?他们是静态内存地址吗?编译器是否给每个人一个特定的“名称”(或只是保留你给他们的一个)? 用代码表示: 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 可以看出,在这种情况下,变量的地址被计算为函数的基指针的偏移量.如果启用优化,变量的值可能存储在寄存器中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |