是否有任何预处理器指令可以控制循环展开?

Ste*_*rna 7 c++ pragma visual-c++ preprocessor-directive

此外,假设循环中的所有操作完全独立于其他迭代,编译器如何确定展开循环的程度.

osg*_*sgx 7

对于MSVC,只有一个向量独立提示:http://msdn.microsoft.com/en-us/library/hh923901.aspx

#pragma loop( ivdep )
Run Code Online (Sandbox Code Playgroud)

对于许多其他编译器,如Intel/ibm,有几个用于优化循环的pragma提示:

#pragma unroll
#pragma loop count N
#pragma ivdep
Run Code Online (Sandbox Code Playgroud)

有关于展开启发式的MSVC++人员的一个主题:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/d0b225c2-f5b0-4bb9-ac6a-4d4f61f7cb17/

VC尝试平衡执行速度和代码大小.您可以使用flags/O1或/ O2更改余额,但即使优化速度VC也会尝试节省代码大小.

基本上,展开会增加代码大小,因此在Os和O1模式下可能会受到限制(模式表)

PS:Pragma看起来像预处理器指令,但事实并非如此.它是编译器的指令,它被预处理器忽略(保留).

  • 谢谢。只是为了与 `gcc` 参考交叉链接,http://stackoverflow.com/questions/4071690/tell-gcc-to-specifically-unroll-a-loop (2认同)