c ++内联汇编优化

c.b*_*ear 0 c++ inline-assembly

为什么Visual Studio C++编译器默认情况下不会优化以下代码?

#include "ctime"
#include "iostream"

#define BIG_NUM 10000000000

int main() {

    std::clock_t begin = clock();

    for (unsigned long long i = 0; i < BIG_NUM; ++i) {
         __asm
        {
            nop
        }
    }

    std::clock_t end = clock();
    std::cout << "time: " << double(end - begin) / CLOCKS_PER_SEC;

    std::cin.get();
}
Run Code Online (Sandbox Code Playgroud)

如果没有_asm块,则操作时间始终为0,因为由于编译器优化,完全"跳过"循环.使用该_asm块只需几秒钟.

是否有任何编译器标志来优化内联汇编或由于某些不明原因而无法实现?

Seb*_*edl 5

编译器并不真正理解内联汇编,因此假设它可以做任何事情.

通常,当您特别想要在较低级别优化某些代码时,可以使用内联汇编.如果你这样做,为什么你期望编译器进一步优化它?