【发布时间】:2016-11-13 19:39:25
【问题描述】:
我听说过几次编译器不会优化内联汇编,或者内联汇编对它来说是一个黑盒。我很怀疑,因为我没有看到任何编译器失败的情况,所以我不在乎。
但是今天我在 GCC wiki 上发现了一个名为 DontUseInlineAsm 的页面。 它包含人们之前告诉我的相同问题,但没有详细说明为什么编译器无法理解内联汇编,因此不会对其进行优化。那么,有谁知道编译器不进行这些优化的原因?
当然,我会把特殊情况放在一边
asm volatile("" : : "g"(value) : "memory"); 或asm volatile("" : : : "memory");
当我们明确告诉编译器这段代码有可见的副作用,因此不应该优化它时。
【问题讨论】:
-
优化代码本身和“优化掉”(即删除)是两件不同的事情,不确定你问的是哪一个。
-
@jester,是的,我明白其中的区别。只是想指出,我理解在某些情况下编译器无法使用内联汇编做任何事情
-
典型的过程是将编译器设置为最大优化并编译函数。你打印出函数的汇编语言列表。使用它作为您的汇编代码的基础;优化编译器生成的程序集。
标签: c++ assembly optimization