https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110801
Bug ID: 110801 Summary: std::format code runs slower than equivalent {fmt} code Product: gcc Version: 13.1.1 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- Using the benchmark from https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html#Benchmarks and adding: #if __has_include(<format>) #include <format> #endif #ifdef __cpp_lib_format void std_format(benchmark::State& s) { size_t result = 0; while (s.KeepRunning()) { for (auto i: data) result += std::format("{}", i).size(); } benchmark::DoNotOptimize(result); } BENCHMARK(std_format); void std_format_to(benchmark::State& s) { size_t result = 0; while (s.KeepRunning()) { for (auto i: data) { char buffer[12]; result += std::format_to(buffer, "{}", i) - buffer; } } benchmark::DoNotOptimize(result); } BENCHMARK(std_format_to); #endif I get: Benchmark Time CPU Iterations -------------------------------------------------------- sprintf 708600 ns 706474 ns 946 ostringstream 1216025 ns 1210087 ns 589 to_string 178579 ns 178088 ns 3824 format 306344 ns 305365 ns 2345 format_to 145606 ns 145223 ns 4940 std_format 514969 ns 513563 ns 1376 std_format_to 436502 ns 435402 ns 1567 The std::to_string performance is good, but std::format is much slower than fmt::format.