gpt4 book ai didi

c++ - `-g -rdynamic` gcc 标志是否显着减慢应用程序执行(增加性能消耗)?

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:27 27 4
gpt4 key购买 nike

所以我想用 backtrace logging 分发我的 gcc 应用程序对于严重错误。然而,它是对性能非常关键的应用程序,所以我想知道 -g -rdynamic gcc 标志是否会减慢执行速度(特别是如果它们分配)?还想为我的用户提供最佳性能,所以我使用 "-flto""-mtune" 等优化标志进行编译,这让我想知道标志是否会发生冲突并且里面的 backtrace 会很疯狂吗?

最佳答案

虽然引入调试符号本身不会影响性能,但您的应用程序在可能的性能方面仍然远远落后。我的意思是,通常同时使用 -g-O3 是个坏主意。因此,如果您的应用程序对性能至关重要,但同时又非常需要保持良好的调试水平,那么在这两者之间找到某种平衡是合理的。在最新版本的 GCC 中,我们提供了 -Og 标志:

Optimize debugging experience. -Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience.

我认为用这个标志测试你的应用程序是个好主意,看看性能是否确实比裸露的 -g 好,但调试保持不变。

再一次强调,不要忽视阅读官方 GCC 文档。 LTO 是 GCC 中相对较新的功能,因此,它的某些部分仍处于试验阶段,不适合生产。例如,这是直接摘录:

Link-time optimization does not work well with generation of debugging information. Combining -flto with -g is currently experimental and expected to produce wrong results.

不久前,我对 LTO 的体验喜忧参半。有时效果很好,有时项目甚至无法编译,更不用说还可能存在细微的运行时问题。综上所述,我不建议使用 LTO,尤其是在您的情况下。

注意:LTO 带来的性能提升通常在 0% 到 3% 之间,这在很大程度上取决于底层应用程序。如果不进行概要分析,您将无法判断针对您的情况采用 LTO 是否合理,因为它可能带来的麻烦多于好处。

-march-mtune 等标志通常在非常低的级别上进行优化 - 指令级别 用于目标处理器架构。因此,我不希望它们干扰调试。不过,欢迎您使用您的应用程序自行测试。

关于c++ - `-g -rdynamic` gcc 标志是否显着减慢应用程序执行(增加性能消耗)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com