我正在尝试学习编译器如何工作的细节,我想知道使用nm时符号B的含义。我试图将std :: cout跟进libstdc ++,但它以
结束nm -DC /usr/lib/libstdc++.so.6 | grep cout
000e8da0 B std::cout
000e9020 B std::wcout
指向实际功能的链接在哪里以及B的含义是什么?
答案 0 :(得分:3)
这意味着符号是全局的并且在未初始化的数据部分中(历史上称为BSS,因此是'B')。更多nm信息:
如果您输入“man 1 nm”,也可以使用。
那么功能呢?好吧,“cout”是一个对象实例,而不是一个函数。它的类将具有函数,在这种特殊情况下主要是运算符重载。
答案 1 :(得分:1)
从nm手册页:
B The symbol is in the uninitialized data section (known as BSS).
答案 2 :(得分:1)
“未初始化”数据(BSS部分)实际上由OS加载程序初始化为全零。它不占用磁盘上图像的空间,因为已知内容为全零 - 只是大小存储在图像中。
全局变量通常在BSS部分中分配。这也是全局变量通常为零初始化的原因。