考虑一种情况,我使用以下代码来评估函数执行所花费的时间。
long double Measure_micro_sec ( void (*foo) () )
{
auto start = std::chrono::system_clock::now();
for(long i =0; i <1000000; ++i)
{
foo();
foo();
if(i%1000 == 0)
std::cout << i << "iterations\n";
}
auto end = std::chrono::system_clock::now();
std::chrono::duration<long double> t_1 = end - start;
auto start = std::chrono::system_clock::now();
for(long i =0; i <1000000; ++i)
{
foo();
foo();
foo();
if( i%1000 == 0 )
std::cout << i << "iterations\n";
}
auto end = std::chrono::system_clock::now();
std::chrono::duration<long double> t_2 = end - start;
return (t_2.count() - t_1.count());
}
在上面的代码中,循环执行总时间的变化相差(理论上)是foo()
的执行时间的n倍(1000000)。因此,foo()
的执行时间为(t2 - t1)/n
秒或(t2 - t1)
微秒。
是否会缓存函数foo()
?它会影响foo()执行时间的计算吗?即,缓存t2-t1
并且未缓存foo()
时的时差(foo()
)会有所不同。
将foo()
视为:
void foo()
{
std::cout << "Example function\n";
}
正如@Hugo和@LightnessRacesinOrbit所说,缓存依赖于函数。这个函数会被缓存吗?
编辑:我使用std::chrono::system_clock
作为计时器