【发布时间】:2018-10-25 04:27:02
【问题描述】:
我正在处理大型项目,大多数文件都超过 7000 行。如果我使用 -fno-inline 选项,编译时间会减少 3 倍。
实际数字:
不带 -fno-inline - 340 秒
w/ -fno-inline ~ 115 秒
我没有发现任何关于 -fno-inline 对编译性能的影响。 对此有什么解释吗?
一些背景:
- 我非常广泛地使用 MACROS(用于日志记录)
- 从旧代码继承了一个全局异常 try / catch 块(需要返工这块)
- 内部很少有 try/catch 块,主要是为了从 stof/stoi 捕获异常
我测试了编译时间和 w/o(-pipe、-O0 到 -O3、-g / no -g、-ggdb / no ggdb)。没有什么比 -fno-inline 更能缩短编译时间了。
【问题讨论】:
-
它会减少编译时间,但也会降低运行时性能。
-
为什么编译时间对你很重要?您是否在并行编译多个翻译单元(例如使用
make -j或ninja)?你在哪个操作系统上编译?您的整个项目有多大(数百个文件中的数百万行?)? -
您可以将the
-ftime-reportoption 传递给g++以更好地了解编译器将时间花在哪里。但是,禁用内联会显着降低可执行文件的运行时性能。 -
"大多数文件超过 7000 行"。逃跑,不要回头。
-
@BasileStarynkevitch 这实际上是 C++ 悲惨状态的一个很好的指标。也许模块会改变它。