私がオンラインで読んだことによると、{fmt} ライブラリは、たとえば stringstreams よりもはるかに高速であると考えられています。
ただし、いくつかの簡単なベンチマーク (システム時間の測定、以下のコードを参照) を行ったところ、{fmt} は常に stringstreams などよりも遅いようです。私は何か間違っていますか?
uint64_t start;
uint64_t stop;
long MAXCOUNT = 10000000;
std::srand(123);
int* numbers = new int[MAXCOUNT];
for ( int i = 0; i < MAXCOUNT; i++) {
numbers[i] = std::rand();
}
{
std::string result;
start = currentTimeInMillis();
for ( int i = 0; i < MAXCOUNT; i++) {
result += fmt::format("Number {} is great!", numbers[i]);
}
stop = currentTimeInMillis();
fmt::print("timing fmt : {} ms / string length: {}\n", stop-start, result.size());
}
{
std::string result;
std::stringstream ss;
start = currentTimeInMillis();
for ( int i = 0; i < MAXCOUNT; i++) {
ss << "Number " << numbers[i] << " is great!";
}
result = ss.str();
stop = currentTimeInMillis();
fmt::print("timing stds: {} ms / string length: {}\n", stop-start, result.size());
}
このコードの典型的な結果 (最適化レベル O3 - 少ないほど悪い) は次のとおりです。
timing fmt : 1414 ms / string length: 264823200
timing stds: 1287 ms / string length: 264823200