我們有一個巨大的二進制文件,並且在命名前定義的常量說那麼header1.h:Linux的C++二進制命名空間
namespace One
{
namespace Two
{
const String TEST_DATE_TIME = "DDMMYYYY"; // Line number say 32
// ................ Around 2500 such constants ..........
}
}
的問題是,當我們運行與儀器(-finstrument-功能和_cyg二進制*函數),我們看到類似下面的方法在我們的報告 - 不都在數據段聲明:
__tcf_2275,header1.h: 32
它意味着,在執行過程中,編譯器花了一些時間來創建命名空間常量 - 但爲什麼呢?我在樣本文件中看不到相同的行爲(在名稱空間中聲明常量)。
此外 -
nm a.out| grep __tcf_ | more
000000000807acf8 t __tcf_1234
000000000807ad60 t __tcf_1456
............................
000000000816ddd0 t __tcf_1125
............................
addr2line -Cfe a.out 0x807acf8 0x807ad60
__tcf_2275
header1.h:2322
__tcf_2274
header1.h:2321
當然我們可以說,在執行過程中的命名空間常數由編譯器構成。我怎樣才能減少它們的執行開銷和ii)爲什麼將定義爲't'部分?
您應該使用'nm -C a.out'來對C++符號名稱進行解映射。 –