Правильно ли так мерять время, затраченное на вызов?

Хочу сравнить время, затраченное на форматирование строки, используя библиотеку libfmt и старый добрый sprintf:

    #include <iostream>
    #include <string>
    #include <chrono>
    using namespace std;

    #define FMT_HEADER_ONLY
    #include "fmt/format.h"

    int main(int argc, char* argv[])
    {
        using namespace std::chrono_literals;

        string str;
        int iters { 10000000 };
        chrono::steady_clock::time_point beg = chrono::steady_clock::now();
        for (int i { 0 }; i < iters; i++) {
            str = fmt::format("Now i is {}", i);
        }
        chrono::steady_clock::time_point fin { chrono::steady_clock::now() };
        chrono::duration<double, std::milli> elapsed { fin - beg };
        cout << "elapsed: " << elapsed.count() << " milliseconds" << endl;
        cout << "time per iteration: " << elapsed.count() / (iters * 1.0) << " milliseconds" << endl;

        const int buf_size { 128 };
        char buf[buf_size];
        beg = chrono::steady_clock::now();
        for (int i { 0 }; i < iters; i++) {
            sprintf(buf, "Now i is %d", i);
        }
        fin = chrono::steady_clock::now();
        elapsed = fin - beg;
        cout << "elapsed: " << elapsed.count() << " milliseconds" << endl;
        cout << "elapsed per iteration: " << elapsed.count() / (iters * 1.0) << " milliseconds"  << endl;

        return 0;
    }

Нет ли тут методических ошибок? Корректно ли такое сравнение?


Ответы (0 шт):