【问题标题】:Will adding the -rdynamic linker option to gcc/g++ impact performance?将 -rdynamic 链接器选项添加到 gcc/g++ 会影响性能吗?
【发布时间】:2012-09-28 05:31:57
【问题描述】:

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

【问题讨论】:

    标签: linux gcc g++


    【解决方案1】:

    是的,有,尽管它非常具体,通常不会引起关注。

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

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

    这种情况对于 C++ 来说比 C 稍差,由于类名的原因,有大量前缀相同的符号名。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-27
      • 2017-01-20
      • 2012-08-08
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多