在gcc/g++中添加-rdynamic链接器选项会影响性能吗?

23

当应用程序崩溃时,我希望能够获取堆栈跟踪信息。我知道选项"-rdynamic"可以显示包括函数名称在内的完整堆栈跟踪信息。但我担心这样做是否会影响我的应用程序性能。

1个回答

30

是的,有这个选项,不过它非常具体化,通常不会引起担忧。

-rdynamic选项指示链接器将符号添加到符号表中,在运行时通常不需要这些符号。这意味着动态链接器需要在运行时为符号解析筛选更多、可能是许多其他符号。

特别地,在基于GNU的系统中实现符号表查找时使用哈希表,具有更多符号会增加哈希冲突的可能性。由于哈希表中所有冲突的符号都存储在列表中,因此运行时链接器需要遍历该列表,并使用memcmp比较每个符号名称。更多符号冲突意味着列表更长,因此解析每个动态符号所需的时间更长。

对于C++而言,情况略微恶化,因为有很多具有相同前缀的符号名称,这是由类名造成的。

实际上,这只会影响第一次使用符号的时候,因此,除非您的应用程序非常大且包含大量符号,否则不会感受到它的影响。

如果您的应用程序确实如此庞大,在罕见情况下,可以使用像预链接这样的技巧来克服开销。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接