使用Microsoft Visual C ++(不是CLI,只是标准的本机C ++)时,内联汇编会导致函数禁用优化吗?
当我使用IDA检查时,块外部的一些功能代码似乎确实发生了变化,但我不确定原因是什么。该函数(相对)简单,包含位操作和一些数学运算,但没有外部调用。
我能想到的其他可能原因是:
有什么想法吗?
答案 0 :(得分:13)
是。请参阅MSDN文章:Optimizing Inline Assembly以及Advantages of Inline Assembly
来自文章:
函数中存在
__asm
块会以多种方式影响优化。首先,编译器不会尝试优化__asm
块本身。你用汇编语言写的就是你得到的。其次,__ asm块的存在会影响寄存器变量存储。如果寄存器的内容将被__asm
块更改,编译器将避免在__asm
块中注册变量。最后,在函数中包含汇编语言会影响其他一些函数范围的优化。