C++编程语言第四版第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
)。 - Basile StarynkevitchveryLongComputation()
的调用可能会瞬间完成。 - Benjamin Lindley