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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...