Правильно ли так мерять время, затраченное на вызов?
Хочу сравнить время, затраченное на форматирование строки, используя библиотеку 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;
}
Нет ли тут методических ошибок? Корректно ли такое сравнение?