C ++编程语言第4版,第225页显示:编译器可以对代码重新排序以提高性能,只要结果与简单执行顺序相同即可。某些编译器,例如处于发布模式的Visual C ++,将重新排序以下代码:
#include <time.h>
...
auto t0 = clock();
auto r = veryLongComputation();
auto t1 = clock();
std::cout << r << " time: " << t1-t0 << endl;
变成这种形式:
auto t0 = clock();
auto t1 = clock();
auto r = veryLongComputation();
std::cout << r << " time: " << t1-t0 << endl;
这样可以保证结果与原始代码不同(报告的时间为零与大于零的时间)。请参阅我的其他问题以获取详细示例。这种行为符合C ++标准吗?
g++ -O2 -S -fverbose-asm your-code.cc
使用GCC ...)