c++ - 在对可执行文件大小没有严格限制的情况下,为什么在 Visual C++ 9 中更喜欢/Ob1 而不是/Ob2?

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

Visual C++ 功能 /Ob控制函数内联的编译器选项。对于 /Ob1,仅内联标记为 inline__inline 或在类声明中定义的函数,而对于 /Ob2编译器认为合适的所有函数都是内联的。

我可以想象一些项目使用 /Ob1 而不是 /Ob2 对图像大小有非常严格的限制。令人惊讶的是,我们发现了一个对图像大小没有严格限制的项目,但它正在使用 /Ob1,但我们找不到这样做的任何原因。

为什么对可执行文件大小没有严格限制的项目更喜欢 /Ob1 而不是 /Ob2

最佳答案

因为更多的内联会导致更大的代码,从而导致缓存利用率更低。由于现代 CPU:s 进行积极的分支预测,跳入/跳出函数不需要非常昂贵。

虽然缓存的大小有限,因此通过内联代码强制 CPU 丢弃缓存中可能存在的其他内容,从而增加未命中次数,从而导致 CPU 停顿。

关于c++ - 在对可执行文件大小没有严格限制的情况下,为什么在 Visual C++ 9 中更喜欢/Ob1 而不是/Ob2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5803767/

相关文章:

c++ - R32I Sampler2D 始终返回 0

c++ - 对 C++ 类型转换感到困惑

windows - 如何创建一个 Win32 控件来包含其他 Win32 控件?

c++ - 当父类和子类的数据成员同名时,如何从子类访问父类的数据成员

python - 除了 CPython 之外,还有其他 Python 编译器吗?

gwt - GWT编译错误

c++ - 让 Visual Studio 2008 使用 8.0 CRT 库?

c++ - 如何在 C++ 中找出内存中变量名称的大小?

c++ - `if ( __some_bool__ != NULL )` 的行为如何?

python - 没有 node.js 的 CoffeeScript 编译器?