c++ - 如果函数内联过于激进会怎样?

标签 c++ performance visual-c++ compiler-construction inline

每次我读到 C++ 中的 inline 关键字时,都会有很长的解释说明编译器会进行“速度与代码量”分析,然后决定是否在每种特定情况下内联函数调用。

现在 Visual C++ 9 有一个 __forceinline keyword这似乎使编译器内联对函数的调用,除非这种内联是绝对不可能的(就像调用是虚拟的)。

假设我在不了解其中内容的情况下浏览了一些项目,然后自己决定三分之一的函数足够小并且适合内联,并用 __forceinline 标记它们,编译器确实内联它们,现在可执行文件已经变大了一百倍。

这真的很重要吗?过度内联函数并使可执行文件大一百倍,我应该期待什么效果?

最佳答案

主要影响是缓存。内联违背了局部性原则; CPU 将不得不更频繁地从主存中获取指令。因此,旨在使代码更快的东西实际上可能会使它变慢。

关于c++ - 如果函数内联过于激进会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4989363/

相关文章:

c++ - 为什么析构函数不能是模板?

c++ - 最快的 C++ 有理数库

c++ - wstring -> ShellExecute 中的 LPCWSTR 给我错误 LNK2028 和 LNK2019

c++ - C++:将lambda作为带有模板参数的函数进行传递会使推导模板类型失败

c++ - 在 opencl 中将锯齿状数组传递给内核

C++参数评估顺序

c++ - 通过迭代加深实现Minimax搜索

c# - 堆与堆栈分配影响 (.NET)

javascript - jQuery/JavaScript : My recursive setTimeout function speeds up when tab becomes inactive

windows - 是否有创建 MFC 错误对话框的常规/标准方法?