G++ 纳米';s未初始化的数据段

G++ 纳米';s未初始化的数据段,g++,G++,我试图了解编译器工作原理背后的细节,我想知道使用nm时符号B是什么意思。我试图将std::cout引入libstdc++,但最终以 nm -DC /usr/lib/libstdc++.so.6 | grep cout 000e8da0 B std::cout 000e9020 B std::wcout 实际函数的链接在哪里?B是什么意思?这意味着符号是全局的,位于未初始化的数据部分(历史上称为BSS,因此称为“B”)。更多信息请点击此处: 如果您键入“man 1 nm”,也可能可用 功能呢?

我试图了解编译器工作原理背后的细节,我想知道使用nm时符号B是什么意思。我试图将std::cout引入libstdc++,但最终以

nm -DC /usr/lib/libstdc++.so.6 | grep cout
000e8da0 B std::cout
000e9020 B std::wcout

实际函数的链接在哪里?B是什么意思?

这意味着符号是全局的,位于未初始化的数据部分(历史上称为BSS,因此称为“B”)。更多信息请点击此处:

如果您键入“man 1 nm”,也可能可用


功能呢?“cout”是一个对象实例,不是一个函数。它的类将具有函数,在这种特殊情况下主要是运算符重载。

这意味着符号是全局的,位于未初始化的数据部分(历史上称为BSS,因此称为“B”)。更多信息请点击此处:

如果您键入“man 1 nm”,也可能可用


功能呢?“cout”是一个对象实例,不是一个函数。它的类将具有函数,在这种特殊情况下主要是运算符重载。

来自nm手册页面:


从nm手册页面:

“未初始化”数据(BSS部分)实际上由OS加载程序初始化为全零。它不会占用磁盘上映像中的空间,因为已知内容都是零-只是大小存储在映像中

全局变量通常在BSS部分分配。这也是全局变量通常为零初始化的原因。

操作系统加载程序实际上将“未初始化”数据(BSS部分)初始化为全零。它不会占用磁盘上映像中的空间,因为已知内容都是零-只是大小存储在映像中


全局变量通常在BSS部分分配。这也是全局变量通常为零初始化的原因。

因此cout std::cout可能是一个全局对象,因此被放置在全局(bss)分区中。在程序“main”被调用之前,平台将运行constructor并初始化std::cout(和其他全局变量)。cout std::cout可能是一个全局对象,因此被放置在全局(bss)分区中。在程序“main”被调用之前,平台将运行constructor并初始化std::cout(和其他全局变量)。
   B       The symbol is in the uninitialized data section (known as BSS).