Cpp重新排序示例,其中计时器不准确

时间:2017-09-24 01:09:57

标签: c++ optimization compiler-optimization

我的理解是C ++在优化时重新排序代码,简单的定时器可能无法为定时执行时间提供准确的结果。有人可以提供以下代码可以重新排序的示例吗?

auto t0 = clock();
auto r = someLongRunningFunc();
auto t1 = clock();
std::cout << r << "  time: " << t1 - t0 << std::endl;

在第一次调用clock()之前或第二次调用clock()之后调用someLongRunningFunc()?

FWIW - 我正在使用Visual Studio 17,我似乎无法编写实现此功能的函数。

1 个答案:

答案 0 :(得分:0)

编译器优化不应该改变代码的含义。

Caribou 的例子中,他介绍了一个重要问题:&#34;长期运行功能&#34;与整数赋值相同。你不能使用clock(),并且编译器(正确地)将其优化为无关紧要。

执行比返回常量值更复杂的事情,实际上是长时间运行或有副作用(例如I / O),并且编译器无法安全地重新排列时钟()。

确实存在“不安全”的优化。编译器(至少是好的)除非您特别要求,否则永远不会应用这些优化。这在通常的C&amp; C C ++警告:当程序员告诉编译器“做我说的话”时,程序员知道他在做什么。