【发布时间】:2013-11-21 19:40:51
【问题描述】:
我正在处理一个项目,其中头文件中有大量代码。如果我使用的是 Visual Studio,这不是问题,因为它具有预编译的头文件等,但这是 Linux GCC 代码。
无论如何,它开始成为编译时间的一个问题。当然,模板必须保留在头文件等中,但大部分代码可以提取到实现文件中并作为静态库链接。所有的项目都使用这些头文件并且每次都被编译,所以创建一个静态库是有意义的。
头文件中的实现是内联的,或者这只是一个提示,就像 inline 关键字一样?这段代码对时间非常关键,我担心将实现移出标题。如果我使用 inline 关键字而不是在头文件中实现,我能达到同样的效果吗?
** 更新 ** 我知道 inline 只是对编译器的提示。我无法控制项目中的所有内容,我只想将所有内容从标题中移到库中而不影响性能。这真的会是一个尝试并看到的东西吗?我只想保持性能完全相同,但增加编译时间。
【问题讨论】:
-
您可以将预编译的头文件与 gcc 一起使用,例如stackoverflow.com/questions/58841/precompiled-headers-with-gcc
-
如果将实现移出标头,则不能(通常)将其声明为内联。必须在每个使用它们的翻译单元中定义内联函数。
-
您尝试过统一构建吗? buffered.io/posts/the-magic-of-unity-builds 显式模板实例化也可能有所帮助。您还可以尝试在实现内联函数时拆分头文件,并在其定义中拆分一个单独的头文件。
标签: c++ performance optimization inline