我们这里有一个非常大的程序,它混合了 C++ 和 FORTRAN(对不起)。我的一次签入导致整个应用程序的速度急剧下降(即两倍或更多)——即使在不受我的更改影响的代码区域也是如此。
事实:
几乎每个模块都减慢了相似的速度——即使是那些不使用我的代码的模块。
可执行文件大约大 6%。
签入之间的元数据未更改。
IDE/编译器是发布模式下的 VS2010。
一些 .lib 文件的大小增加了一倍或三倍。
我查看了一个大小增加了两倍的 .lib 文件,但只有两个变化:
a) 我已经包含了一个很大的头文件,该头文件又包含许多其他头文件——其中一些包含中等复杂的内联代码。“其他包含目录”已从无或一变为大约 7 个,因为每个头文件#includes 一个或多个其他头文件。
b) 我从这个头文件中调用了 4 个函数,但是在运行速度变慢的过程中没有调用这些函数(即它们的执行不会减慢代码的速度,但可以想象它们的包含)。
尽管在论坛中搜索是否包含头文件会减慢执行速度(与编译相反),但我找不到一篇相关的文章。我的问题是:
? #inclusion 是否包含任何形式的标头(声明或内联)会减慢代码执行速度?
? 包含内联代码与执行速度是否存在定性或定量差异(我知道“内联”只是对编译器的建议)?
? .lib 大小、.exe 大小和执行速度之间的相关性是什么(我预计这里会有很多不同和矛盾的相关性)?
? 重构一些头文件以使其不需要包含其他头文件(通过将这些包含放入 .cpp 文件中,从而减少我的“其他包含目录”)会改善我的情况,你认为吗?
我想最后一个问题是问题的核心,因为这需要付出很多努力......