考虑一种情况,我使用以下代码来评估函数执行所花费的时间。
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());
}
在上面的代码中,循环执行总时间的变化(理论上)相差 n 倍(1000000)的执行时间foo()
。因此执行时间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
计时器