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

标签 linux gcc g++

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

最佳答案

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

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

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

对于 C++,这种情况比 C 稍差,由于类名,存在大量相同前缀的符号名称。

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

在极少数情况下,您的应用程序非常大,可以使用 prelinking 等技巧可用于克服开销。

关于linux - 将 -rdynamic 链接器选项添加到 gcc/g++ 会影响性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12634114/

相关文章:

linux - 使用 at 命令从终端自动启动 Firefox

c - 如何将给定基数中任意长度整数的字符串表示形式转换为十进制?

c++ - '...' 不是类型 C++ 编译错误

c++ - 如何在 Code::Blocks 中查看运行时调用的函数列表

c++ - g++ 和 cilkscreen 用于检测竞争条件

python - Python [de]压缩模块在Linux上是线程安全的吗?在Google App Engine上?

linux - 修改 tar 存档中嵌套的文件

linux - 复制服务器的全部内容

c - 根据 git 推送日期自动包含程序版本

gcc - rpath 的正确用法(相对与绝对)