加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读