我尝试使用以下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上的一行代表说:
callq的内存地址为0。
答案 0 :(得分:1)
汇编列表中的0只是一个占位符。链接器将填充更多的地址(通常是数据段开头的偏移量),然后加载器将使用加载图像的地址调整这些偏移量。