微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C编译器如何编译变量名?

我明白我没有说清楚.我的怀疑我可以总结一下:

在可执行文件(机器代码)中如何表示“变量”?他们是静态内存地址吗?编译器是否给每个人一个特定的“名称”(或只是保留你给他们的一个)?

代码表示:

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

可以看出,在这种情况下,变量的地址被计算为函数的基指针的偏移量.如果启用优化,变量的值可能存储在寄存器中.

原文地址:https://www.jb51.cc/c/114598.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐