我的理解是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,我似乎无法编写实现此功能的函数。
答案 0 :(得分:0)
在 Caribou 的例子中,他介绍了一个重要问题:&#34;长期运行功能&#34;与整数赋值相同。你不能使用clock(),并且编译器(正确地)将其优化为无关紧要。
执行比返回常量值更复杂的事情,实际上是长时间运行或有副作用(例如I / O),并且编译器无法安全地重新排列时钟()。
确实存在“不安全”的优化。编译器(至少是好的)除非您特别要求,否则永远不会应用这些优化。这在通常的C&amp; C C ++警告:当程序员告诉编译器“做我说的话”时,程序员知道他在做什么。