G++;编译器目标代码:为什么为数据变量分配0的内存地址 我尝试用下面的Linux命令编译我的简单C++源代码 $g++-cfoo.cpp生成一个对象文件。我意识到我创建的所有宏变量都被分配了一个0的内存地址。这背后的原因是什么?为什么汇编程序不给变量分配适当的内存量呢

G++;编译器目标代码:为什么为数据变量分配0的内存地址 我尝试用下面的Linux命令编译我的简单C++源代码 $g++-cfoo.cpp生成一个对象文件。我意识到我创建的所有宏变量都被分配了一个0的内存地址。这背后的原因是什么?为什么汇编程序不给变量分配适当的内存量呢,c++,memory,memory-management,compiler-construction,g++,C++,Memory,Memory Management,Compiler Construction,G++,编辑: 以下是我使用的代码: $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++)

编辑:

以下是我使用的代码:

$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\n”
使用名称空间std;
int main(){
整数计数=3;
for(int i=0;icout程序集列表中的0只是一个占位符。链接器将填充更多地址(通常是从数据段开始的偏移量),然后加载程序将使用图像加载到的地址调整这些偏移量。

显示代码和汇编程序输出。欢迎这样做,请阅读并提供这几乎肯定不是正在发生的事情。0是函数的地址,而不是参数的地址。由于函数未在此翻译单元中定义,因此需要我后来补上了。