当前位置: 首页 > 面试题库 >

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

武博艺
2023-03-14
问题内容

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


问题答案:

是的,尽管它非常具体,通常不会引起关注,但确实存在。

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

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

对于C ++而言,这种情况要比C稍差一些,由于类名的缘故,有许多相同前缀的符号名。

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

在您的应用程序如此大的罕见情况下,可以使用诸如预链接之类的技巧来克服开销。



 类似资料:
  • 主要内容:链接其它目录中的库链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。在链接过程中,它必须把符号(变量名、函数名等一些列标识符)用对应的数据的内存地址(变量地址、函数地址等)替代,以完成程序中多个模块的外部引用。 而且,链接器也必须将程序中所用到的所有C标准库函数加入其中。对于链接器而言,链接库不过是一个具有许多目标文件的集合,它们在一个文件中以方便处理。 当把程序链接到一个链接库时,

  • 我在一个Android Live壁纸应用程序中有如下偏好。(这些是复选框)。我想添加一个链接到一个Facebook页面到这个列表。在网上查看Android PreferenceCategory,我没有看到任何类似“LinkPreference”或“ButtonPreference”的东西,但话说回来,链接或按钮并不是真正的首选,所以也许我想把一个方形的钉子放在一个圆孔里。这可能吗?如果可能,如何可

  • 问题内容: varchar列上的索引是否会使查询运行缓慢?我可以将其设为int。而且我不需要做LIKE%比较。 问题答案: varchar列上的索引是否会使查询运行缓慢? 不,不是的。 如果优化器决定使用索引,则查询将运行得更快。 该表上的s / s / s会变慢,但不太可能引起注意。 我不需要做LIKE%比较 请注意,使用: …将 不 使用索引,但以下内容将: 关键是在字符串的左侧使用通配符,这

  • 问题内容: 我试图在接收每月数百万次页面浏览量的页面中找到一些简单的客户端性能调整。我关心的一个问题是使用CSS通用选择器()。 例如,考虑一个非常简单的HTML文档,如下所示: 通用选择器会将以上声明应用于,和元素,因为它们是文档中唯一的那些。 通常,我会从以下规则中看到更好的性能: 还是会产生完全相同的净效果? 通用选择器是否执行我可能不知道的更多工作? 我意识到该示例中的性能影响可能很小,但

  • 我有一个包含三个模块的工作簿,总共大约19000行代码。 我添加了多个按钮来运行性能完美的子程序。 我添加了四个新的子程序(都很短,总共可能有200行)来复制/粘贴数据并构建一个图形。 当我添加这些子例程时,所有其他子例程都开始异常缓慢地运行(从5-10秒到几分钟,有些子例程完全冻结)。 我有一个解决方法的想法(每次运行例程时关闭和打开自动计算),但我试图理解为什么这是一个问题。 Excel在待机

  • 问题内容: 在浏览器中,缩小和隐藏或加载异步JavaScript会对性能产生积极影响。在Node.js中运行的代码是否也是如此? 如Example那样,过多的注释和为实例化的类的属性使用长名称通常会严重影响性能和内存使用吗? 问题答案: 是的 ,它可以提高编译时的性能,但是编译时对您的整个过程生命周期而言无关紧要,因此无关紧要。唯一的区别是,如果您出于某种奇怪的原因而不断地启动和停止节点程序,那么