c++ - header 实现和用于优化的内联关键字

标签 c++ performance optimization inline

我正在处理一个项目,其中头文件中有大量代码。如果我使用的是 Visual Studio,这将不是问题,因为它具有预编译的 header 等,但这是 Linux GCC 代码。

无论如何,它开始成为编译时间的一个问题。当然,模板必须保留在 header 等中,但大部分代码都可以提取到实现文件中,并作为静态库进行链接。所有项目都使用这些 header 并每次都进行编译,因此创建静态库是有意义的。

头文件中的实现是内联的,或者这只是一个提示,如 inline 关键字?这段代码对时间非常关键,我担心将实现从标题中移出。如果我使用 inline 关键字而不是在头文件中实现,我能否实现相同的目的?

**更新** 我知道内联只是对编译器的提示。我无法控制项目中的所有内容,我只想将所有内容从标题中移到库中而不影响性能。这真的是一个尝试看看的东西吗?我只想保持性能完全相同但增加编译时间。

最佳答案

inline 关键字只是提示编译器它可能希望内联该函数。它的真正目的是让您合法地“违反”单一定义规则。

为了内联一个函数,它的主体必须在调用点可见,这通常意味着如果您将函数移动到一个实现文件中,它可能不再被内联。

但请记住,标题中的大型函数很可能不会被内联。还要考虑到,在许多情况下,由于各种特定于体系结构的问题,内联函数实际上可能被调用的函数。

关于c++ - header 实现和用于优化的内联关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130388/

相关文章:

c++ - OS X 上的链接器错误 "ld: framework not found SFML"

C++ 比奇数大

windows - 如何使用 Perl 快速修复大文件中的 EBCDIC 控制字符?

c# - 查找两个列表中的差异

haskell - 避免二叉树构造中的堆栈溢出

C++\Win32 以低优先级模式运行应用程序/线程?

c++ - OpenGL 模型加载器问题

json - Reflect vs Regex 检查 Golang 中的空 JSON 数组属性

mysql - 提高JOIN和GROUP BY性能的指标有哪些

C++ 集中化 SIMD 使用