G ++编译器目标代码:为什么数据变量被分配的内存地址为0

时间:2016-09-17 01:21:51

标签: c++ memory memory-management compiler-construction g++

我尝试使用以下Linux命令编译我的简单C ++源代码 $ g ++ -c foo.cpp 生成目标文件。我意识到我创建的所有宏变量都被分配了一个0的内存地址。这背后的原因是什么?为什么汇编程序没有为变量分配适当的内存量。

编辑:

以下是我使用的代码:

  

$ g ++ -c -g string.cpp

     

$ objdump -dS string.o> string.o.text

以下是我简单的C ++代码:

#include <iostream>

#define STRING "string\n"

using namespace std;

int main() {

    int count = 3;
    for (int i = 0; i < count; i++)
        cout<< STRING;
    return 0;
}

我的string.o.txt上的一行代表说: Snapshot of part of my object file

callq的内存地址为0。

1 个答案:

答案 0 :(得分:1)

汇编列表中的0只是一个占位符。链接器将填充更多的地址(通常是数据段开头的偏移量),然后加载器将使用加载图像的地址调整这些偏移量。