0

考虑一种情况,我使用以下代码来评估函数执行所花费的时间。

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计时器

4

0 回答 0