2009-07-13 107 views
0

我想了解編譯器工作原理背後的細節,我想知道符號B在使用nm時意味着什麼。我試圖按照性病::法院到的libstdC++,但它與nm的未初始化數據部分

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

哪裏是鏈接到實際功能又是什麼在B意味着結束?

回答

3

這意味着該符號是全局的,並在未初始化的數據部分(歷史上稱爲BSS因此'B')。更多納米資訊:

http://linux.die.net/man/1/nm

也有可能獲得,如果你輸入「男子1納米」。

那麼功能呢?那麼,「cout」是一個對象實例,而不是一個函數。它的類將具有功能,在這種特殊情況下主要是操作符重載。

+0

因此,cout <<「whatever」被實例化爲std :: cout對象,然後調用std :: operator <<來打印它? – victor 2009-07-13 23:15:40

1

從納米手冊頁面:

B  The symbol is in the uninitialized data section (known as BSS). 
1

「未初始化的」 數據時,BSS部,實際上是由OS加載到全零初始化。它不佔用磁盤映像中的空間,因爲內容已知爲全零 - 只是大小存儲在映像中。

全局變量通常在BSS部分中分配。這也是全局變量通常是零初始化的原因。