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/