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

时间:2012-09-28 05:31:57

标签: linux gcc g++

我想在应用程序崩溃时获取堆栈跟踪。我知道-rdynamic选项可以使用函数名称获取完整的堆栈跟踪。但是我担心是否会对我的应用程序的性能产生任何影响。

1 个答案:

答案 0 :(得分:23)

是的,虽然它非常具体,通常不会引起关注。

-rdynamic选项指示链接器将符号添加到运行时通常不需要的符号表中。这意味着动态链接器在运行时需要更多,可能更多的符号来进行符号解析。

具体地说,由于基于GNU的系统中的符号表查找是使用散列实现的,因此具有更多符号会增加存在散列冲突的可能性。由于在哈希表中发生碰撞的所有符号都位于列表中,因此运行时链接程序需要遍历列表并使用memcmp比较每个符号名称。在散列中有更多符号冲突意味着具有更长的列表,因此需要更多时间来解析每个动态符号。

对于C ++而言,这种情况稍微差一点,因为类名会带有大量相同前缀的符号名称。

在实践中,这仅在第一次使用符号时产生影响,因此,除非您的应用程序非常大且包含大量符号,否则将无法感觉到。

在极少数情况下,您的应用程序很大,可以使用prelinking之类的技巧来克服开销。