我们有一个巨大的二进制文件,并且在命名前定义的常量说那么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++符号名称进行解映射。 –