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

前端之家收集整理的这篇文章主要介绍了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

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

猜你在找的C&C++相关文章