Visual Studio C++编译器选项/O2(最大速度)等效于

/Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy

为什么是/Gs?它如何帮助最大化速度? (请注意,它是/Gs,而不是/GS。)

最佳答案

/O2未设置/Gs,这是文档中的错误。

一些实验(很容易在生成的程序集中看到__chkstk调用)表明:

/Gs(无编号)等效于/Gs0,表示始终插入__chkstk调用。确实,MSDN表示相同:



/O2未设置/Gs(又名/Gs0),“/O2”和“/O2/Gs”之间有明显的区别。尽管有可能将默认值更改为页面以外的其他值,但这似乎只是文档错误。

堆栈探针永远不会提高性能,只有在堆栈前进到新的高水位线并在其余时间被浪费时才需要做。这意味着,如果您有一个循环调用一个函数100次,则该函数堆栈探针可能会在第一次增长堆栈,但是在其他99次情况下,它不会更改任何内容,因为该堆栈已在第一次增长-如果需要完全可以成长。

关于c++ - Visual Studio C++编译器选项: Why does/O2 define/Gs?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9884480/

10-12 02:27