diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d7b775..1dbd492 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,8 +5,8 @@ include(FetchContent) project( simstr - VERSION 1.2.5 - DESCRIPTION "Yet another string library" + VERSION 1.2.6 + DESCRIPTION "Yet another modern C++ string library" HOMEPAGE_URL "https://github.com/orefkov/simstr" LANGUAGES CXX ) diff --git a/bench/bench_str.cpp b/bench/bench_str.cpp index f1739e0..f4f0157 100644 --- a/bench/bench_str.cpp +++ b/bench/bench_str.cpp @@ -176,9 +176,6 @@ void ToIntStr0(benchmark::State& state, const std::string& s, int c) { } void ToIntFromChars10(benchmark::State& state, const std::string_view& s, int c) { -//#ifdef __EMSCRIPTEN__ - //state.SkipWithError("not implemented"); -//#else for (auto _: state) { int res = 0; std::from_chars(s.data(), s.data() + s.size(), res, 10); @@ -190,13 +187,9 @@ void ToIntFromChars10(benchmark::State& state, const std::string_view& s, int c) #endif benchmark::DoNotOptimize(res); } -//#endif } void ToIntFromChars16(benchmark::State& state, const std::string_view& s, int c) { -//#ifdef __EMSCRIPTEN__ -// state.SkipWithError("not implemented"); -//#else for (auto _: state) { int res = 0; std::from_chars(s.data(), s.data() + s.size(), res, 16); @@ -208,13 +201,12 @@ void ToIntFromChars16(benchmark::State& state, const std::string_view& s, int c) #endif benchmark::DoNotOptimize(res); } -//#endif } template void ToIntSimStr10(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int()); + int res = t. template to_int().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -229,7 +221,7 @@ void ToIntSimStr10(benchmark::State& state, T t, int c) { template void ToIntSimStr16(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int()); + int res = t. template to_int().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -244,7 +236,7 @@ void ToIntSimStr16(benchmark::State& state, T t, int c) { template void ToIntSimStr0(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int()); + int res = t. template to_int().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -258,7 +250,7 @@ void ToIntSimStr0(benchmark::State& state, T t, int c) { void ToIntNoOverflow(benchmark::State& state, ssa t, int c) { for (auto _: state) { - int res = std::get<0>(t.to_int()); + int res = t.to_int().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -287,6 +279,63 @@ BENCHMARK_CAPTURE(ToIntStr0, , std::string{" 123456789"}, 123456789) BENCHMARK_CAPTURE(ToIntSimStr0, , stringa{" 123456789"}, 123456789) ->Name("stringa s = \" 123456789\"; int res = s.to_int; // Check overflow"); BENCHMARK_CAPTURE(ToIntNoOverflow, , ssa{" 123456789"}, 123456789) ->Name("ssa s = \" 123456789\"; int res = s.to_int; // No check overflow"); +void ToDoubleStr(benchmark::State& state, const std::string& s, double c) { + for (auto _: state) { + char* ptr = nullptr; + double res = std::strtod(s.c_str(), &ptr); + if (ptr == s.c_str()) { + state.SkipWithError("not equal"); + } + #ifdef CHECK_RESULT + if (res != c) { + state.SkipWithError("not equal"); + break; + } + #endif + benchmark::DoNotOptimize(res); + } +} + +void ToDoubleFromChars(benchmark::State& state, const std::string_view& s, double c) { + for (auto _: state) { + double res = 0; + if (std::from_chars(s.data(), s.data() + s.size(), res).ec != std::errc{}) { + state.SkipWithError("not equal"); + } + #ifdef CHECK_RESULT + if (res != c) { + state.SkipWithError("not equal"); + break; + } + #endif + benchmark::DoNotOptimize(res); + } +} + +template +void ToDoubleSimStr(benchmark::State& state, T t, double c) { + for (auto _: state) { + auto r = t.template to_double(); + if (!r) { + state.SkipWithError("not equal"); + } + double res = *r; + #ifdef CHECK_RESULT + if (res != c) { + state.SkipWithError("not equal"); + break; + } + #endif + benchmark::DoNotOptimize(res); + benchmark::DoNotOptimize(t); + } +} + +BENCHMARK(__)->Name("----- Convert to double '1234.567e10' ---------")->Repetitions(1); +BENCHMARK_CAPTURE(ToDoubleStr, , std::string{"1234.567e10"}, 1234.567e10) ->Name("std::string s = \"1234.567e10\"; double res = std::strtod(s.c_str(), nullptr);"); +BENCHMARK_CAPTURE(ToDoubleFromChars, , std::string_view{"1234.567e10"}, 1234.567e10) ->Name("std::string_view s = \"1234.567e10\"; std::from_chars(s.data(), s.data() + s.size(), res);"); +BENCHMARK_CAPTURE(ToDoubleSimStr, , ssa{"1234.567e10"}, 1234.567e10) ->Name("ssa s = \"1234.567e10\"; double res = *s.to_double()"); + void AppendStreamConstLiteral(benchmark::State& state) { for (auto _: state) { std::string result; diff --git a/bench/process_result.cpp b/bench/process_result.cpp index 3332256..829ae06 100644 --- a/bench/process_result.cpp +++ b/bench/process_result.cpp @@ -84,9 +84,9 @@ results_vector get_results_infos() { } } } - + results_vector results; - + if (fileNames.size()) { std::sort(fileNames.begin(), fileNames.end()); results.reserve(fileNames.size()); @@ -95,7 +95,7 @@ results_vector get_results_infos() { // В начале имени файла может идти число и дефис, для сортировки, уберём их // At the beginning of the file name there can be a number and a hyphen, for sorting, remove them if (auto delimeter = fileName.find('-'); delimeter + 1 > 1) { - if (std::get<1>(fileName(0, delimeter).to_int()) == IntConvertResult::Success) { + if (fileName(0, delimeter).to_int().ec == IntConvertResult::Success) { fileName.remove_prefix(delimeter + 1); } } @@ -187,7 +187,7 @@ ssa extract_source_for_benchmark(ssa benchName, ssa sourceText) { static hashStrMapA textes; size_t delim = benchName.find_last('/'); - if (delim != str::npos && std::get<1>(benchName(delim + 1).to_int()) == IntConvertResult::Success) { + if (delim != str::npos && benchName(delim + 1).to_int().ec == IntConvertResult::Success) { benchName.len = delim; } auto [it, not_exist] = textes.try_emplace(benchName); @@ -326,6 +326,9 @@ void write_benchmarks(out_t& out, const results_vector& results, ssa sourceText, throw std::runtime_error{"Not expected end of file"}; } line = splitters[idx].next(); + if (line.starts_with("std::unordered_map emplace & find std::string_view;_cv")) { + int t = 1; + } } } if (needFooter) { diff --git a/bench/results.html b/bench/results.html index 0c941d5..64b5d4e 100644 --- a/bench/results.html +++ b/bench/results.html @@ -274,24 +274,24 @@ L1 Instruction 32 KiB (x16) L2 Unified 256 KiB (x16) L3 Unified 40960 KiB (x1) -Load Average: 0.49, 0.86, 0.76 Include in charts: +Load Average: 0.10, 0.62, 0.73 Include in charts:
  • Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-1332 X 2494.22 MHz CPU sCPU Caches: L1 Data 32 KiB (x16) L1 Instruction 32 KiB (x16) L2 Unified 256 KiB (x16) L3 Unified 40960 KiB (x1) -Load Average: 0.00, 0.00, 0.00 Include in charts:
  • -
  • Xeon E5-2682 v4, Windows 10, Clang-1932 X 2518.87 MHz CPU sCPU Caches: +Load Average: 0.02, 0.05, 0.12 Include in charts:
  • +
  • Xeon E5-2682 v4, Windows 10, Clang-1932 X 2494 MHz CPU sCPU Caches: L1 Data 32 KiB (x16) L1 Instruction 32 KiB (x16) L2 Unified 256 KiB (x16) L3 Unified 40960 KiB (x1) Include in charts:
  • -
  • Xeon E5-2682 v4, Windows 10, MSVC-1932 X 2497.21 MHz CPU sCPU Caches: +
  • Xeon E5-2682 v4, Windows 10, MSVC-1932 X 2494 MHz CPU sCPU Caches: L1 Data 32 KiB (x16) L1 Instruction 32 KiB (x16) L2 Unified 256 KiB (x16) L3 Unified 40960 KiB (x1) Include in charts:
  • -
  • Xeon E5-2682 v4, WASM Chrome, Clang-2132 X 2513.96 MHz CPU sChrome 136.0.7103.114 webasm Include in charts:
  • +
  • Xeon E5-2682 v4, WASM Chrome, Clang-2132 X 2513.96 MHz CPU sChromium: 142.0.7444.60 webasm Include in charts:
  • @@ -304,49 +304,49 @@ void CreateEmpty(benchmark::State& state) { T empty_string; benchmark::DoNotOptimize(empty_string); } -} >> Пустые строки, ничего необычного.1.131.191.122.593.47 +} >> Пустые строки, ничего необычного.1.111.151.112.955.87 std::string_view e;template<typename T> void CreateEmpty(benchmark::State& state) { for (auto _: state) { T empty_string; benchmark::DoNotOptimize(empty_string); } -}0.3720.7590.3771.863.68 +}0.3690.7430.3681.855.26 ssa e;template<typename T> void CreateEmpty(benchmark::State& state) { for (auto _: state) { T empty_string; benchmark::DoNotOptimize(empty_string); } -}0.3750.1850.3671.842.14 +}0.3690.1850.3611.524.67 stringa e;template<typename T> void CreateEmpty(benchmark::State& state) { for (auto _: state) { T empty_string; benchmark::DoNotOptimize(empty_string); } -}0.7570.7590.7512.223.66 +}0.7420.7590.7362.254.82 lstringa<20> e;template<typename T> void CreateEmpty(benchmark::State& state) { for (auto _: state) { T empty_string; benchmark::DoNotOptimize(empty_string); } -}1.161.111.142.623.10 +}1.131.131.122.584.64 lstringa<40> e;template<typename T> void CreateEmpty(benchmark::State& state) { for (auto _: state) { T empty_string; benchmark::DoNotOptimize(empty_string); } -}1.141.131.152.603.10 +}1.131.131.132.594.76

    Create Str from short literal (9 symbols)

    @@ -358,7 +358,7 @@ void CreateShortLiteral(benchmark::State& state) { benchmark::DoNotOptimize(empty_string); } } >> Короткий литерал помещается во внутренний буфер std::string, -время тратится только на копирование 10 байтов.1.881.881.852.614.95 +время тратится только на копирование 10 байтов.1.911.851.872.585.17 std::string_view e = "Test text";template<typename T> void CreateShortLiteral(benchmark::State& state) { for (auto _: state) { @@ -366,14 +366,14 @@ void CreateShortLiteral(benchmark::State& state) { benchmark::DoNotOptimize(empty_string); } } >> И string_view, и ssa - по сути одно и то же: -указатель на текст и его длина.0.7460.7570.7401.832.22 +указатель на текст и его длина.0.7480.7510.7271.905.57 ssa e = "Test text";template<typename T> void CreateShortLiteral(benchmark::State& state) { for (auto _: state) { T empty_string = TEST_TEXT; benchmark::DoNotOptimize(empty_string); } -}0.3770.7460.3711.842.18 +}0.3740.7810.3641.853.41 stringa e = "Test text";template<typename T> void CreateShortLiteral(benchmark::State& state) { for (auto _: state) { @@ -381,7 +381,7 @@ void CreateShortLiteral(benchmark::State& state) { benchmark::DoNotOptimize(empty_string); } } >> stringa при инициализации константным литералом так же -сохраняет только указатель на текст и его длину.1.121.121.122.604.69 +сохраняет только указатель на текст и его длину.1.111.131.102.925.07 lstringa<20> e = "Test text";template<typename T> void CreateShortLiteral(benchmark::State& state) { for (auto _: state) { @@ -389,21 +389,21 @@ void CreateShortLiteral(benchmark::State& state) { benchmark::DoNotOptimize(empty_string); } } >> Внутреннего буфера хватает для размещения символов, -время уходит только на копирование байтов.1.891.871.842.256.54 +время уходит только на копирование байтов.1.881.861.852.595.37 lstringa<40> e = "Test text";template<typename T> void CreateShortLiteral(benchmark::State& state) { for (auto _: state) { T empty_string = TEST_TEXT; benchmark::DoNotOptimize(empty_string); } -}1.901.911.872.634.02 +}1.861.881.842.615.37

    Create Str from long literal (30 symbols)

    @@ -416,7 +416,7 @@ void CreateLongLiteral(benchmark::State& state) { } } >> Вот тут уже литерал не помещается во внутренний буфер, возникает аллокация и копирование 30-и байтов. -Но как же отстает аллокация под Windows от Linux'а, 20 vs 70 ns...19.518.778.074.856.3 +Но как же отстает аллокация под Windows от Linux'а, 20 vs 70 ns...18.819.978.576.063.4 std::string_view e = "123456789012345678901234567890";template<typename T> void CreateLongLiteral(benchmark::State& state) { for (auto _: state) { @@ -424,21 +424,21 @@ void CreateLongLiteral(benchmark::State& state) { benchmark::DoNotOptimize(empty_string); } } >> string_view и ssa по прежнему ничего не делают, кроме -запоминания указателя на текст и его размера.0.7580.7510.7391.845.05 +запоминания указателя на текст и его размера.0.7470.8080.7311.825.58 ssa e = "123456789012345678901234567890";template<typename T> void CreateLongLiteral(benchmark::State& state) { for (auto _: state) { T empty_string{LONG_TEXT}; benchmark::DoNotOptimize(empty_string); } -}0.3760.7540.3691.852.18 +}0.3730.7540.3711.823.33 stringa e = "123456789012345678901234567890";template<typename T> void CreateLongLiteral(benchmark::State& state) { for (auto _: state) { T empty_string{LONG_TEXT}; benchmark::DoNotOptimize(empty_string); } -} >> stringa на константных литералах не отстает!1.131.131.112.925.33 +} >> stringa на константных литералах не отстает!1.131.121.122.584.95 lstringa<20> e = "123456789012345678901234567890";template<typename T> void CreateLongLiteral(benchmark::State& state) { for (auto _: state) { @@ -446,7 +446,7 @@ void CreateLongLiteral(benchmark::State& state) { benchmark::DoNotOptimize(empty_string); } } >> lstringa<20> может вместить в себя до 23 символов, -Очевидно, что для 30-и символов уже нужна аллокация.20.519.682.076.759.7 +Очевидно, что для 30-и символов уже нужна аллокация.21.219.680.176.863.1 lstringa<40> e = "123456789012345678901234567890";template<typename T> void CreateLongLiteral(benchmark::State& state) { for (auto _: state) { @@ -454,14 +454,14 @@ void CreateLongLiteral(benchmark::State& state) { benchmark::DoNotOptimize(empty_string); } } >> А в lstringa<40> влезает до 47 символов, так что просто -копируется 30 байтов.1.902.591.853.016.28 +копируется 30 байтов.2.571.862.533.335.86

    Create copy of Str with 9 symbols

    @@ -474,7 +474,7 @@ void CopyShortString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -} >> Строка в пределах SSO, так что просто копирует байты.5.734.911.875.165.67 +} >> Строка в пределах SSO, так что просто копирует байты.4.984.951.856.0011.0 std::string_view e = "Test text"; auto c{e};template<typename T> void CopyShortString(benchmark::State& state) { T x{TEST_TEXT}; @@ -483,7 +483,7 @@ void CopyShortString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}0.3810.3770.3763.745.04 +}0.3730.3810.3703.465.91 ssa e = "Test text"; auto c{e};template<typename T> void CopyShortString(benchmark::State& state) { T x{TEST_TEXT}; @@ -493,7 +493,7 @@ void CopyShortString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> ssa и string_view не владеют строкой, копируется -только информация о строке.0.3760.3780.3773.755.02 +только информация о строке.0.3760.3770.3703.516.84 stringa e = "Test text"; auto c{e};template<typename T> void CopyShortString(benchmark::State& state) { T x{TEST_TEXT}; @@ -503,7 +503,7 @@ void CopyShortString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> Копирование stringa происходит быстро, -особенно если она инициализирована литералом.1.121.141.324.074.81 +особенно если она инициализирована литералом.1.131.351.304.035.18 lstringa<20> e = "Test text"; auto c{e};template<typename T> void CopyShortString(benchmark::State& state) { T x{TEST_TEXT}; @@ -512,7 +512,7 @@ void CopyShortString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -} >> В обоих случаях хватает внутреннего буфера.5.004.845.238.6415.8 +} >> В обоих случаях хватает внутреннего буфера.4.844.495.258.5117.5 lstringa<40> e = "Test text"; auto c{e};template<typename T> void CopyShortString(benchmark::State& state) { T x{TEST_TEXT}; @@ -521,14 +521,14 @@ void CopyShortString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -} >> Только копируются байты.4.624.605.248.4615.7 +} >> Только копируются байты.4.534.935.368.4317.4

    Create copy of Str with 30 symbols

    @@ -541,7 +541,7 @@ void CopyLongString(benchmark::State& state) { benchmark::DoNotOptimize(copy); } } >> Копирования длинной строки вызывает аллокацию, -SSO уже не хватает. И снова как же отстаёт аллокация под Windows...19.824.278.276.3116 +SSO уже не хватает. И снова как же отстаёт аллокация под Windows...19.624.281.783.093.3 std::string_view e = "123456789012345678901234567890"; auto c{e};template<typename T> void CopyLongString(benchmark::State& state) { T x = LONG_TEXT; @@ -549,7 +549,7 @@ void CopyLongString(benchmark::State& state) { T copy{x}; benchmark::DoNotOptimize(copy); } -}0.7630.7460.7411.845.04 +}0.7480.7470.7411.905.57 ssa e = "123456789012345678901234567890"; auto c{e};template<typename T> void CopyLongString(benchmark::State& state) { T x = LONG_TEXT; @@ -557,7 +557,7 @@ void CopyLongString(benchmark::State& state) { T copy{x}; benchmark::DoNotOptimize(copy); } -}0.3730.7440.3721.872.20 +}0.3730.7460.3682.023.32 stringa e = "123456789012345678901234567890"; auto c{e};template<typename T> void CopyLongString(benchmark::State& state) { T x = LONG_TEXT; @@ -566,7 +566,7 @@ void CopyLongString(benchmark::State& state) { benchmark::DoNotOptimize(copy); } } >> А вот у stringa копирование литерала не зависит от его длины, -сравни с предыдущим бенчмарком.1.141.131.892.975.36 +сравни с предыдущим бенчмарком.1.131.131.863.414.89 lstringa<20> e = "123456789012345678901234567890"; auto c{e};template<typename T> void CopyLongString(benchmark::State& state) { T x = LONG_TEXT; @@ -574,7 +574,7 @@ void CopyLongString(benchmark::State& state) { T copy{x}; benchmark::DoNotOptimize(copy); } -} >> Не влезает, аллокация.20.224.479.082.067.1 +} >> Не влезает, аллокация.20.024.479.390.466.3 lstringa<40> e = "123456789012345678901234567890"; auto c{e};template<typename T> void CopyLongString(benchmark::State& state) { T x = LONG_TEXT; @@ -582,14 +582,14 @@ void CopyLongString(benchmark::State& state) { T copy{x}; benchmark::DoNotOptimize(copy); } -} >> Уложили во внутренний буфер.4.685.624.957.0515.5 +} >> Уложили во внутренний буфер.5.404.614.947.1117.0

    Find 9 symbols text in end of 99 symbols text

    @@ -609,7 +609,7 @@ void Find(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> Здесь "победила дружба", у всех типов по колонке примерно одинаково. -Однако, Windows и Linux явно в разных весовых категориях.7.737.1139.542.5141 +Однако, Windows и Linux явно в разных весовых категориях.6.876.8739.545.0101 std::string_view::find;template<typename T> void Find(benchmark::State& state) { T x{LONG_TEXT LONG_TEXT LONG_TEXT TEST_TEXT}; @@ -624,7 +624,7 @@ void Find(benchmark::State& state) { benchmark::DoNotOptimize(i); benchmark::DoNotOptimize(x); } -}7.256.4339.141.5134 +}7.757.3940.044.2103 ssa::find;template<typename T> void Find(benchmark::State& state) { T x{LONG_TEXT LONG_TEXT LONG_TEXT TEST_TEXT}; @@ -639,7 +639,7 @@ void Find(benchmark::State& state) { benchmark::DoNotOptimize(i); benchmark::DoNotOptimize(x); } -}6.916.4718.221.1101 +}6.966.9318.121.8102 stringa::find;template<typename T> void Find(benchmark::State& state) { T x{LONG_TEXT LONG_TEXT LONG_TEXT TEST_TEXT}; @@ -654,7 +654,7 @@ void Find(benchmark::State& state) { benchmark::DoNotOptimize(i); benchmark::DoNotOptimize(x); } -}8.106.8318.832.2102 +}7.388.0019.431.0105 lstringa<20>::find;template<typename T> void Find(benchmark::State& state) { T x{LONG_TEXT LONG_TEXT LONG_TEXT TEST_TEXT}; @@ -669,7 +669,7 @@ void Find(benchmark::State& state) { benchmark::DoNotOptimize(i); benchmark::DoNotOptimize(x); } -}6.916.8818.221.3100 +}6.906.9218.126.399.9 lstringa<40>::find;template<typename T> void Find(benchmark::State& state) { T x{LONG_TEXT LONG_TEXT LONG_TEXT TEST_TEXT}; @@ -684,14 +684,14 @@ void Find(benchmark::State& state) { benchmark::DoNotOptimize(i); benchmark::DoNotOptimize(x); } -}6.926.8017.821.6102 +}6.836.8718.124.9100

    Copy not literal Str with N symbols

    @@ -704,7 +704,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}5.877.341.855.18117 +}4.905.071.864.4597.2 std::string copy{str_with_len_N};/16template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -715,7 +715,7 @@ void CopyDynString(benchmark::State& state) { } } >> Явно виден скачок, где заканчивается SSO и начинается аллокация. Обратите внимание, что WASM - 32-битный, и там размер -SSO у std::string меньше, насколько я помню, 11 символов + 0.23.524.880.484.9120 +SSO у std::string меньше, насколько я помню, 11 символов + 0.23.123.781.694.094.6 std::string copy{str_with_len_N};/23template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -724,7 +724,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -} >> Дальше просто добавляется время на копирование байтов.23.625.381.285.1119 +} >> Дальше просто добавляется время на копирование байтов.23.223.979.894.891.6 std::string copy{str_with_len_N};/24template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -733,7 +733,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}23.724.680.983.1120 +}22.324.980.597.794.5 std::string copy{str_with_len_N};/32template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -742,7 +742,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}23.123.985.989.1124 +}22.222.686.295.897.0 std::string copy{str_with_len_N};/64template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -751,7 +751,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}23.124.187.189.7125 +}22.622.979.394.198.1 std::string copy{str_with_len_N};/128template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -760,7 +760,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}25.426.190.389.0122 +}26.224.285.0103103 std::string copy{str_with_len_N};/256template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -769,7 +769,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}25.526.687.891.5146 +}27.325.584.4105161 std::string copy{str_with_len_N};/512template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -778,7 +778,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}30.430.890.493.8163 +}28.329.286.697.1151 std::string copy{str_with_len_N};/1024template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -787,7 +787,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}39.041.295.599.5148 +}39.637.295.399.1131 std::string copy{str_with_len_N};/2048template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -796,7 +796,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}111111130132165 +}81.381.5127140148 std::string copy{str_with_len_N};/4096template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -805,7 +805,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -} >> Чем длиннее строка, тем дольше создаётся копия.142139186181204 +} >> Чем длиннее строка, тем дольше создаётся копия.117118176187185 stringa copy{str_with_len_N};/15template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -815,7 +815,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> Здесь stringa инициализируется не литералом, -а значит, должна сама хранить символы.1.131.111.314.154.84 +а значит, должна сама хранить символы.1.131.131.344.035.19 stringa copy{str_with_len_N};/16template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -826,7 +826,7 @@ void CopyDynString(benchmark::State& state) { } } >> Под WASM SSO у stringa составляет 15 символов. Кроме того, собиралось без поддержки потоков, поэтому возможно атомарный -инкремент заменён на обычный, судя по времени.1.121.121.314.1110.3 +инкремент заменён на обычный, судя по времени.1.121.141.354.0910.0 stringa copy{str_with_len_N};/23template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -836,7 +836,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> SSO в stringa до 23 символов, и даже 23 -копируются быстрее, чем 15 в std::string.1.121.111.304.1310.1 +копируются быстрее, чем 15 в std::string.1.111.201.354.069.97 stringa copy{str_with_len_N};/24template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -846,7 +846,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> Всё, не влезаем в SSO, а значит, используем shared буфер. -Добавляется время на атомарный инкремент счётчика.16.316.216.118.710.2 +Добавляется время на атомарный инкремент счётчика.16.616.315.818.710.1 stringa copy{str_with_len_N};/32template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -855,7 +855,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}16.416.216.318.610.2 +}16.216.215.818.610.0 stringa copy{str_with_len_N};/64template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -864,7 +864,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}16.316.816.018.610.0 +}16.016.216.018.99.95 stringa copy{str_with_len_N};/128template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -873,7 +873,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}16.616.316.118.610.1 +}16.216.315.818.49.93 stringa copy{str_with_len_N};/256template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -882,7 +882,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}16.316.316.018.610.1 +}16.016.215.818.69.95 stringa copy{str_with_len_N};/512template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -891,7 +891,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}16.316.416.018.710.1 +}16.016.116.019.510.0 stringa copy{str_with_len_N};/1024template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -900,7 +900,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}16.316.216.018.610.0 +}16.416.515.918.39.92 stringa copy{str_with_len_N};/2048template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -909,7 +909,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}16.416.216.018.810.0 +}16.116.316.018.510.0 stringa copy{str_with_len_N};/4096template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -919,7 +919,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> И как видно, кроме инкремента нет накладных расходов, -время копирования не зависит от длины строки.16.316.216.018.510.1 +время копирования не зависит от длины строки.16.116.215.918.910.1 lstringa<16> copy{str_with_len_N};/15template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -929,7 +929,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> lstringa<16> использует SSO до 23 символов. -А в WASM 32-битная архитектура, SSO до 19 символов.5.114.874.858.6715.7 +А в WASM 32-битная архитектура, SSO до 19 символов.5.084.884.967.8517.2 lstringa<16> copy{str_with_len_N};/16template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -938,7 +938,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}5.124.834.838.6116.1 +}4.974.894.878.0717.0 lstringa<16> copy{str_with_len_N};/23template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -947,7 +947,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}5.204.904.898.5875.4 +}4.905.014.987.9477.8 lstringa<16> copy{str_with_len_N};/24template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -956,7 +956,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -} >> И после начинает вести себя при копировании, как std::string.24.325.083.580.576.2 +} >> И после начинает вести себя при копировании, как std::string.24.225.084.082.876.5 lstringa<16> copy{str_with_len_N};/32template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -965,7 +965,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}23.925.085.883.182.1 +}24.124.588.085.579.5 lstringa<16> copy{str_with_len_N};/64template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -974,7 +974,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}25.825.981.483.178.1 +}25.625.984.885.182.9 lstringa<16> copy{str_with_len_N};/128template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -983,7 +983,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}26.327.084.386.579.2 +}27.326.585.189.883.0 lstringa<16> copy{str_with_len_N};/256template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -992,7 +992,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}27.728.385.189.8103 +}27.629.688.2655133 lstringa<16> copy{str_with_len_N};/512template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1001,7 +1001,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}30.630.789.090.8121 +}30.430.989.492.5130 lstringa<16> copy{str_with_len_N};/1024template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1010,7 +1010,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}85.983.799.5101107 +}70.071.7101101111 lstringa<16> copy{str_with_len_N};/2048template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1019,7 +1019,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}99.297.7132131123 +}74.574.3131132122 lstringa<16> copy{str_with_len_N};/4096template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1028,7 +1028,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}118116195192160 +}90.993.3194196167 lstringa<512> copy{str_with_len_N};/15template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1037,7 +1037,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}4.964.995.578.4715.3 +}5.144.934.948.6217.9 lstringa<512> copy{str_with_len_N};/16template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1046,7 +1046,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}4.954.895.698.5915.1 +}4.864.975.368.9418.5 lstringa<512> copy{str_with_len_N};/23template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1055,7 +1055,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}4.914.895.608.4815.6 +}4.914.945.058.6718.6 lstringa<512> copy{str_with_len_N};/24template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1064,7 +1064,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}4.924.855.598.6015.3 +}4.994.904.838.4418.8 lstringa<512> copy{str_with_len_N};/32template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1073,7 +1073,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}4.614.528.4811.717.2 +}4.585.037.9412.025.0 lstringa<512> copy{str_with_len_N};/64template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1082,7 +1082,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}6.146.158.7411.618.3 +}6.066.127.9212.121.2 lstringa<512> copy{str_with_len_N};/128template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1091,7 +1091,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}6.506.598.9911.919.1 +}6.447.878.2612.322.3 lstringa<512> copy{str_with_len_N};/256template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1100,7 +1100,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}8.198.2910.113.032.3 +}8.008.709.3113.224.0 lstringa<512> copy{str_with_len_N};/512template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1110,7 +1110,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(x); } } >> Даже 512 символов копируются быстрее, чем -одна аллокация или атомарный инкремент.10.410.611.814.633.8 +одна аллокация или атомарный инкремент.10.710.610.914.626.8 lstringa<512> copy{str_with_len_N};/1024template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1119,7 +1119,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -} >> А дальше уже как у всех87.089.099.4101106 +} >> А дальше уже как у всех69.871.499.098.2113 lstringa<512> copy{str_with_len_N};/2048template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1128,7 +1128,7 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}103101133130119 +}73.477.5131131129 lstringa<512> copy{str_with_len_N};/4096template<typename T> void CopyDynString(benchmark::State& state) { T x(state.range(0), 'a'); @@ -1137,56 +1137,56 @@ void CopyDynString(benchmark::State& state) { benchmark::DoNotOptimize(copy); benchmark::DoNotOptimize(x); } -}118115196192162 +}90.893.4191195169

    Convert to int '1234567'

    @@ -1201,17 +1201,13 @@ void CopyDynString(benchmark::State& state) { } #endif benchmark::DoNotOptimize(res); - benchmark::DoNotOptimize(s); } } >> В simstr для конвертации в число достаточно куска строки, нет нужды в null терминированности. Ближайший аналог такого поведения "std::from_chars", но он к сожалению очень ограничен по возможностям. Здесь я попытался произвести тесты, близкие по -логике к работе std::from_chars27.527.332.533.7205 +логике к работе std::from_chars27.527.031.732.4204 std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);void ToIntFromChars10(benchmark::State& state, const std::string_view& s, int c) { -#ifdef __EMSCRIPTEN__ - state.SkipWithError("not implemented"); -#else for (auto _: state) { int res = 0; std::from_chars(s.data(), s.data() + s.size(), res, 10); @@ -1222,15 +1218,13 @@ void CopyDynString(benchmark::State& state) { } #endif benchmark::DoNotOptimize(res); - benchmark::DoNotOptimize(s); } -#endif } >> from_chars требует точного указания основания счисления, -не допускает знаков плюс, пробелов, префиксов 0x и т.п.15.212.413.817.9Not impl +не допускает знаков плюс, пробелов, префиксов 0x и т.п.15.812.313.915.065.9 stringa s = "123456789"; int res = s.to_int<int, true, 10, false>template<typename T> void ToIntSimStr10(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int<int, true, 10, false, false>()); + int res = t. template to_int<int, true, 10, false, false>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1241,11 +1235,11 @@ void ToIntSimStr10(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(t); } } >> Здесь для to_int заданы такие же ограничения - проверять переполнение, -десятичная система, без лидирующих пробелов и знака плюс13.77.9213.315.455.2 +десятичная система, без лидирующих пробелов и знака плюс12.88.3814.315.358.9 ssa s = "123456789"; int res = s.to_int<int, true, 10, false>template<typename T> void ToIntSimStr10(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int<int, true, 10, false, false>()); + int res = t. template to_int<int, true, 10, false, false>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1255,11 +1249,11 @@ void ToIntSimStr10(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(res); benchmark::DoNotOptimize(t); } -}13.27.7313.015.151.0 +}12.58.4813.016.254.2 lstringa<20> s = "123456789"; int res = s.to_int<int, true, 10, false>template<typename T> void ToIntSimStr10(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int<int, true, 10, false, false>()); + int res = t. template to_int<int, true, 10, false, false>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1269,13 +1263,13 @@ void ToIntSimStr10(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(res); benchmark::DoNotOptimize(t); } -}12.87.7313.214.952.1 +}12.58.3613.415.954.1

    Convert to unsigned 'abcDef'

    @@ -1290,13 +1284,9 @@ void ToIntSimStr10(benchmark::State& state, T t, int c) { } #endif benchmark::DoNotOptimize(res); - benchmark::DoNotOptimize(s); } -} >> Всё то же, только для 16ричной системы24.224.034.436.1149 +} >> Всё то же, только для 16ричной системы23.924.334.535.7158 std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);void ToIntFromChars16(benchmark::State& state, const std::string_view& s, int c) { -#ifdef __EMSCRIPTEN__ - state.SkipWithError("not implemented"); -#else for (auto _: state) { int res = 0; std::from_chars(s.data(), s.data() + s.size(), res, 16); @@ -1307,14 +1297,12 @@ void ToIntSimStr10(benchmark::State& state, T t, int c) { } #endif benchmark::DoNotOptimize(res); - benchmark::DoNotOptimize(s); } -#endif -}9.8014.88.2910.1Not impl +}10.015.08.499.9085.4 stringa s = "abcDef"; int res = s.to_int<int, true, 16, false>template<typename T> void ToIntSimStr16(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int<int, true, 16, false, false>()); + int res = t. template to_int<int, true, 16, false, false>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1324,11 +1312,11 @@ void ToIntSimStr16(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(res); benchmark::DoNotOptimize(t); } -}11.87.5511.413.851.8 +}12.98.5712.314.650.4 ssa s = "abcDef"; int res = s.to_int<int, true, 16, false>template<typename T> void ToIntSimStr16(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int<int, true, 16, false, false>()); + int res = t. template to_int<int, true, 16, false, false>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1338,11 +1326,11 @@ void ToIntSimStr16(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(res); benchmark::DoNotOptimize(t); } -}11.68.2810.812.850.0 +}12.57.9012.014.047.5 lstringa<20> s = "abcDef"; int res = s.to_int<int, true, 16, false>template<typename T> void ToIntSimStr16(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int<int, true, 16, false, false>()); + int res = t. template to_int<int, true, 16, false, false>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1352,13 +1340,13 @@ void ToIntSimStr16(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(res); benchmark::DoNotOptimize(t); } -}11.58.1611.212.851.4 +}12.77.9411.813.947.2

    Convert to int ' 1234567'

    @@ -1373,13 +1361,12 @@ void ToIntSimStr16(benchmark::State& state, T t, int c) { } #endif benchmark::DoNotOptimize(res); - benchmark::DoNotOptimize(s); } -} >> А здесь уже парсинг произвольного числа.29.129.144.248.8216 +} >> А здесь уже парсинг произвольного числа.28.928.744.147.2226 stringa s = " 123456789"; int res = s.to_int<int>; // Check overflowtemplate<typename T> void ToIntSimStr0(benchmark::State& state, T t, int c) { for (auto _: state) { - int res = std::get<0>(t. template to_int<int>()); + int res = t. template to_int<int>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1389,10 +1376,10 @@ void ToIntSimStr0(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(res); benchmark::DoNotOptimize(t); } -}22.116.718.822.474.8 +}18.815.717.220.080.3 ssa s = " 123456789"; int res = s.to_int<int, false>; // No check overflowvoid ToIntNoOverflow(benchmark::State& state, ssa t, int c) { for (auto _: state) { - int res = std::get<0>(t.to_int<int, false>()); + int res = t.to_int<int, false>().value; #ifdef CHECK_RESULT if (res != c) { state.SkipWithError("not equal"); @@ -1402,14 +1389,71 @@ void ToIntSimStr0(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(res); benchmark::DoNotOptimize(t); } -}15.814.615.919.051.3 +}16.110.916.618.553.0
    -

    Append const literal of 16 bytes 64 times, 1024 total length

    +

    Convert to double '1234.567e10'

    + + + + +
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);void ToDoubleStr(benchmark::State& state, const std::string& s, double c) { + for (auto _: state) { + char* ptr = nullptr; + double res = std::strtod(s.c_str(), &ptr); + if (ptr == s.c_str()) { + state.SkipWithError("not equal"); + } + #ifdef CHECK_RESULT + if (res != c) { + state.SkipWithError("not equal"); + break; + } + #endif + benchmark::DoNotOptimize(res); + } +}65.065.0103106460
    std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);void ToDoubleFromChars(benchmark::State& state, const std::string_view& s, double c) { + for (auto _: state) { + double res = 0; + if (std::from_chars(s.data(), s.data() + s.size(), res).ec != std::errc{}) { + state.SkipWithError("not equal"); + } + #ifdef CHECK_RESULT + if (res != c) { + state.SkipWithError("not equal"); + break; + } + #endif + benchmark::DoNotOptimize(res); + } +}24.223.962.885.6294
    ssa s = "1234.567e10"; double res = *s.to_double()template<typename T> +void ToDoubleSimStr(benchmark::State& state, T t, double c) { + for (auto _: state) { + auto r = t.template to_double<false>(); + if (!r) { + state.SkipWithError("not equal"); + } + double res = *r; + #ifdef CHECK_RESULT + if (res != c) { + state.SkipWithError("not equal"); + break; + } + #endif + benchmark::DoNotOptimize(res); + benchmark::DoNotOptimize(t); + } +}26.124.335.737.7105
    + +

    Append const literal of 16 bytes 64 times, 1024 total length

    +} +} +} +аллокация, тем быстрее результат. +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    std::stringstream str; ... str << "abbaabbaabbaabba";void AppendStreamConstLiteral(benchmark::State& state) { for (auto _: state) { @@ -1428,7 +1472,7 @@ void ToIntSimStr0(benchmark::State& state, T t, int c) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(str); } -}138414397392575811603
    140315134774583011819
    std::string str; ... str += "abbaabbaabbaabba";void AppendStdStringConstLiteral(benchmark::State& state) { for (auto _: state) { std::string result; @@ -1443,7 +1487,7 @@ void ToIntSimStr0(benchmark::State& state, T t, int c) { #endif benchmark::DoNotOptimize(result); } -}368369106813271138
    359346108413131174
    lstringa<8> str; ... str += "abbaabbaabbaabba";template<unsigned N> void AppendLstringConstLiteral(benchmark::State& state) { for (auto _: state) { @@ -1459,7 +1503,7 @@ void AppendLstringConstLiteral(benchmark::State& state) { #endif benchmark::DoNotOptimize(result); } -}3703727579721204
    3373717679731294
    lstringa<128> str; ... str += "abbaabbaabbaabba";template<unsigned N> void AppendLstringConstLiteral(benchmark::State& state) { for (auto _: state) { @@ -1476,7 +1520,7 @@ void AppendLstringConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); } } >> Чем больше внутренний буфер, тем меньше раз требуется -аллокация, тем быстрее результат.254258403539873
    242264391541900
    lstringa<512> str; ... str += "abbaabbaabbaabba";template<unsigned N> void AppendLstringConstLiteral(benchmark::State& state) { for (auto _: state) { @@ -1492,7 +1536,7 @@ void AppendLstringConstLiteral(benchmark::State& state) { #endif benchmark::DoNotOptimize(result); } -}232241229371640
    227239246365637
    lstringa<1024> str; ... str += "abbaabbaabbaabba";template<unsigned N> void AppendLstringConstLiteral(benchmark::State& state) { for (auto _: state) { @@ -1508,17 +1552,17 @@ void AppendLstringConstLiteral(benchmark::State& state) { #endif benchmark::DoNotOptimize(result); } -}140140139235498
    -

    Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length

    +

    Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length

    +} +} +} +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    std::stringstream str; ... str << str_var << "abbaabbaabbaabba";void AppendStreamStrConstLiteral(benchmark::State& state) { std::string s1 = TEXT_16; @@ -1538,7 +1582,7 @@ void AppendLstringConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(s1); } -}139013996632598611698
    140314564816557111807
    std::string str; ... str += str_var + "abbaabbaabbaabba";void AppendStdStrStrConstLiteral(benchmark::State& state) { std::string p1 = TEXT_16; for (auto _: state) { @@ -1555,7 +1599,7 @@ void AppendLstringConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}12981343390139294015
    12961276396841824085
    lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";template<unsigned N> void AppendLstringStrConstLiteral(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1573,7 +1617,7 @@ void AppendLstringStrConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}4254297638491435
    4314207968271439
    lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";template<unsigned N> void AppendLstringStrConstLiteral(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1591,7 +1635,7 @@ void AppendLstringStrConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}3673614815501128
    3263554925421179
    lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";template<unsigned N> void AppendLstringStrConstLiteral(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1609,7 +1653,7 @@ void AppendLstringStrConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}323316306388858
    312310315381934
    lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";template<unsigned N> void AppendLstringStrConstLiteral(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1627,17 +1671,17 @@ void AppendLstringStrConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}241256214271730
    -

    Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length

    +

    Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length

    +} +} +} +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 timesvoid AppendStreamStrConstLiteralBig(benchmark::State& state) { std::string s1 = TEXT_16; @@ -1657,7 +1701,7 @@ void AppendLstringStrConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(s1); } -}7390874700361900285644581542
    125727132670219773284627609176
    std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 timesvoid AppendStdStrStrConstLiteralBig(benchmark::State& state) { std::string p1 = TEXT_16; for (auto _: state) { @@ -1674,7 +1718,7 @@ void AppendLstringStrConstLiteral(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}7772272474199378194551207680
    7716074369193770193928207760
    lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 timestemplate<unsigned N> void AppendLstringStrConstLiteralBig(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1692,7 +1736,7 @@ void AppendLstringStrConstLiteralBig(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}2111219642198522361552577
    5247955191194462352553812
    lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 timestemplate<unsigned N> void AppendLstringStrConstLiteralBig(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1710,7 +1754,7 @@ void AppendLstringStrConstLiteralBig(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}1612417774182152228049889
    2838928835194102244451889
    lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 timestemplate<unsigned N> void AppendLstringStrConstLiteralBig(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1728,7 +1772,7 @@ void AppendLstringStrConstLiteralBig(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}1612917565179732233550097
    1813719500187722284850113
    lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 timestemplate<unsigned N> void AppendLstringStrConstLiteralBig(benchmark::State& state) { stringa p1 = TEXT_16; @@ -1746,17 +1790,17 @@ void AppendLstringStrConstLiteralBig(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(p1); } -}1614518274178912166349930
    -

    Append 2 string of 16 bytes 32 times, 1024 total length

    +

    Append 2 string of 16 bytes 32 times, 1024 total length

    +} +} +} +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    std::stringstream str; ... str << str_var1 << str_var2;void AppendStream2String(benchmark::State& state) { std::string s1 = TEXT_16; @@ -1778,11 +1822,11 @@ void AppendLstringStrConstLiteralBig(benchmark::State& state) { benchmark::DoNotOptimize(s1); benchmark::DoNotOptimize(s2); } -}139314006383549111739
    136914254503545311836
    std::string str; ... str += str_var1 + str_var2;void AppendStdStr2String(benchmark::State& state) { std::string s1 = TEXT_16; std::string s2 = TEXT_16; - + for (auto _: state) { std::string result; for (size_t c = 0; c < 32; c++) { @@ -1798,7 +1842,7 @@ void AppendLstringStrConstLiteralBig(benchmark::State& state) { benchmark::DoNotOptimize(s1); benchmark::DoNotOptimize(s2); } -}14121342398639974587
    13961392406244154507
    lstringa<16> str; ... str += str_var1 + str_var2;template<unsigned N> void AppendLstring2String(benchmark::State& state) { stra s1 = TEXT_16; @@ -1818,7 +1862,7 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(s1); benchmark::DoNotOptimize(s2); } -}5135988599581593
    5236308429591657
    lstringa<128> str; ... str += str_var1 + str_var2;template<unsigned N> void AppendLstring2String(benchmark::State& state) { stra s1 = TEXT_16; @@ -1838,7 +1882,7 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(s1); benchmark::DoNotOptimize(s2); } -}4435005696641343
    4195345466561413
    lstringa<512> str; ... str += str_var1 + str_var2;template<unsigned N> void AppendLstring2String(benchmark::State& state) { stra s1 = TEXT_16; @@ -1858,7 +1902,7 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(s1); benchmark::DoNotOptimize(s2); } -}3954624034831057
    3954704164841088
    lstringa<1024> str; ... str += str_var1 + str_var2;template<unsigned N> void AppendLstring2String(benchmark::State& state) { stra s1 = TEXT_16; @@ -1878,17 +1922,17 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(s1); benchmark::DoNotOptimize(s2); } -}312431314381929
    -

    Append text, number, text

    +

    Append text, number, text

    +} +} +} +} +} +} +} +Ещё раз - используйте сразу буфера подходящего размера. -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    std::stringstream str; str << "test = " << k << " times";void AppendStreamStrNumStr(benchmark::State& state) { for (auto _: state) { @@ -1906,7 +1950,7 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(k); } } -}31333419116631161519990
    31493106109761217419450
    std::string str = "test = " + std::to_string(k) + " times";void AppendStdStringStrNumStr(benchmark::State& state) { for (auto _: state) { for (unsigned k = 1; k <= 1'000'000'000; k *= 10) { @@ -1921,7 +1965,7 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(k); } } -}486451111412603781
    482448113112443261
    char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;void AppendSprintfStrNumStr(benchmark::State& state) { for (auto _: state) { for (unsigned k = 1; k <= 1'000'000'000; k *= 10) { @@ -1938,7 +1982,7 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(k); } } -}14241509290628558018
    14161526294128867677
    std::string str = std::format("test = {} times", k);void AppendFormatStrNumStr(benchmark::State& state) { for (auto _: state) { for (unsigned k = 1; k <= 1'000'000'000; k *= 10) { @@ -1953,7 +1997,7 @@ void AppendLstring2String(benchmark::State& state) { benchmark::DoNotOptimize(k); } } -}11841286195024205058
    11341271208224804200
    lstringa<8> str; str.format("test = {} times", k);template<typename T> void AppendSimStrStrNumStrF(benchmark::State& state) { for (auto _: state) { @@ -1970,7 +2014,7 @@ void AppendSimStrStrNumStrF(benchmark::State& state) { benchmark::DoNotOptimize(k); } } -} >> В simstr format с первого раза не помещается в такую строку без аллокации.14121618211226097141
     >> В simstr format с первого раза не помещается в такую строку без аллокации.13901674213726416598
    lstringa<32> str; str.format("test = {} times", k);template<typename T> void AppendSimStrStrNumStrF(benchmark::State& state) { for (auto _: state) { @@ -1987,7 +2031,7 @@ void AppendSimStrStrNumStrF(benchmark::State& state) { benchmark::DoNotOptimize(k); } } -} >> А в такую помещается. Используйте сразу буфера подходящего размера.9971132102915495041
     >> А в такую помещается. Используйте сразу буфера подходящего размера.9631138100415514632
    lstringa<8> str = "test = " + k + " times";template<typename T> void AppendSimStrStrNumStr(benchmark::State& state) { for (auto _: state) { @@ -2003,7 +2047,7 @@ void AppendSimStrStrNumStr(benchmark::State& state) { benchmark::DoNotOptimize(k); } } -} >> Результат не помещается в SSO, возникает аллокация.3233168239491865
     >> Результат не помещается в SSO, возникает аллокация.2903178309111342
    lstringa<32> str = "test = " + k + " times";template<typename T> void AppendSimStrStrNumStr(benchmark::State& state) { for (auto _: state) { @@ -2020,7 +2064,7 @@ void AppendSimStrStrNumStr(benchmark::State& state) { } } } >> А здесь и ниже - результат укладывается в SSO. -Ещё раз - используйте сразу буфера подходящего размера.1571621601911202
    157154158195614
    stringa str = "test = " + k + " times";template<typename T> void AppendSimStrStrNumStr(benchmark::State& state) { for (auto _: state) { @@ -2037,20 +2081,20 @@ void AppendSimStrStrNumStr(benchmark::State& state) { } } } >> Под WASM размер SSO 15 символов, что явно не хватает для размещения -результата, отсюда и такое время.1521741562411715
    -

    Split text and convert to int

    +

    Split text and convert to int

    +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    std::string::find + substr + std::strtolvoid SplitConvertIntStdString(benchmark::State& state) { std::string numbers = NUMBER_LIST; @@ -2074,7 +2118,7 @@ void AppendSimStrStrNumStr(benchmark::State& state) { benchmark::DoNotOptimize(total); benchmark::DoNotOptimize(numbers); } -}2682855765551618
    2762735585711414
    ssa::splitter + ssa::as_intvoid SplitConvertIntSimStr(benchmark::State& state) { stra numbers = NUMBER_LIST; for (auto _: state) { @@ -2091,7 +2135,7 @@ void AppendSimStrStrNumStr(benchmark::State& state) { benchmark::DoNotOptimize(total); benchmark::DoNotOptimize(numbers); } -}161139173289655
    154137171311670
    ssa::splitf + functorvoid SplitConvertIntSplitf(benchmark::State& state) { stra numbers = NUMBER_LIST; for (auto _: state) { @@ -2106,14 +2150,14 @@ void AppendSimStrStrNumStr(benchmark::State& state) { benchmark::DoNotOptimize(total); benchmark::DoNotOptimize(numbers); } -}180153188207899
    -

    Replace symbols in text ~400 symbols

    +

    Replace symbols in text ~400 symbols

    +то работает быстро. +} +} +} +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    Naive (and wrong) replace symbols with std::string find + replacevoid ReplaceSymbolsStdStringNaiveWrong(benchmark::State& state) { std::string_view source = @@ -2169,7 +2213,7 @@ void AppendSimStrStrNumStr(benchmark::State& state) { } } >> Это наивная реализация, которая неверно отработает на таких заменах, как 'a'->'b' и 'b'->'a'. Но если замены не конфликтуют, -то работает быстро.859867115313036193
    852851117112586175
    replace symbols with std::string find_first_of + replacevoid ReplaceSymbolsStdStringNaiveRight(benchmark::State& state) { std::string_view source = "abcdefg124 < jhsfjsh sjdfsh jfhjd && jdjdj >" @@ -2222,7 +2266,7 @@ void AppendSimStrStrNumStr(benchmark::State& state) { benchmark::DoNotOptimize(source); benchmark::DoNotOptimize(repl); } -} >> Дальше уже правильные реализации, не зависящие от конфликтующих замен.25412597207322059978
     >> Дальше уже правильные реализации, не зависящие от конфликтующих замен.251024962063234410124
    replace symbols with std::string_view find_first_of + copyvoid ReplaceSymbolsStdString(benchmark::State& state) { std::string_view source = "abcdefg124 < jhsfjsh sjdfsh jfhjd && jdjdj >" @@ -2234,7 +2278,7 @@ void AppendSimStrStrNumStr(benchmark::State& state) { "abcdefg124 < jhsfjsh sjdfsh jfhjd && jdjdj >" " ksjd-fksjd \"dkjfs-jkhdf dfj ' kdkd \"dkfdkfkdjf" ; - + const std::string_view repl_from = "-<>'\"&"; const std::string_view repl_to[] = {"", "&lt;", "&gt;", "&#39;", "&quot;", "&amp;"}; @@ -2273,10 +2317,8 @@ void AppendSimStrStrNumStr(benchmark::State& state) { #endif benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); - benchmark::DoNotOptimize(repl_from); - benchmark::DoNotOptimize(repl_to); } -}271926712441262510198
    1110973241026065505
    replace runtime symbols with string expressions and without remembering all search resultstemplate<bool UseVector> void ReplaceSymbolsDynPatternSimStr(benchmark::State& state) { stra source = @@ -2322,7 +2364,7 @@ void ReplaceSymbolsDynPatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(source); benchmark::DoNotOptimize(repl); } -}12531543138615555706
    12351508144115245599
    replace runtime symbols with simstr and memorization of all search resultstemplate<bool UseVector> void ReplaceSymbolsDynPatternSimStr(benchmark::State& state) { stra source = @@ -2368,7 +2410,7 @@ void ReplaceSymbolsDynPatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(source); benchmark::DoNotOptimize(repl); } -}10261181137313825029
    10691172139614055123
    replace const symbols with string expressions and without remembering all search resultstemplate<bool UseVector> void ReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { stra source = @@ -2411,7 +2453,7 @@ void ReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}11501265121312774946
    10841253120912884773
    replace const symbols with string expressions and memorization of all search resultstemplate<bool UseVector> void ReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { stra source = @@ -2454,18 +2496,18 @@ void ReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}897866122812664198
    -

    Replace symbols in text ~40 symbols

    +

    Replace symbols in text ~40 symbols

    +} +} +} +} +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    Short Naive (and wrong) replace symbols with std::string find + replacevoid ShortReplaceSymbolsStdStringNaiveWrong(benchmark::State& state) { std::string_view source = @@ -2505,7 +2547,7 @@ void ReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(source); benchmark::DoNotOptimize(repl); } -}1651703213291016
    170161331346827
    Short replace symbols with std::string find_first_of + replacevoid ShortReplaceSymbolsStdStringNaiveRight(benchmark::State& state) { std::string_view source = "abcdefg124 < jhsfjsh sjdfsh jfhjd && jdjdj >" @@ -2544,12 +2586,12 @@ void ReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(source); benchmark::DoNotOptimize(repl); } -}3123483784291431
    3103213754351187
    Short replace symbols with std::string_view find_first_of + copyvoid ShortReplaceSymbolsStdString(benchmark::State& state) { std::string_view source = "abcdefg124 < jhsfjsh sjdfsh jfhjd && jdjdj >" ; - + const std::string_view repl_from = "-<>'\"&"; const std::string_view repl_to[] = {"", "&lt;", "&gt;", "&#39;", "&quot;", "&amp;"}; @@ -2581,10 +2623,8 @@ void ReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { #endif benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); - benchmark::DoNotOptimize(repl_from); - benchmark::DoNotOptimize(repl_to); } -}3383223423631417
    165155329381694
    Short replace runtime symbols with string expressions and without remembering all search resultstemplate<bool UseVector> void ShortReplaceSymbolsDynPatternSimStr(benchmark::State& state) { stra source = @@ -2616,7 +2656,7 @@ void ShortReplaceSymbolsDynPatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(source); benchmark::DoNotOptimize(repl); } -}165198251279795
    167192256277583
    Short replace runtime symbols with simstr and memorization of all search resultstemplate<bool UseVector> void ShortReplaceSymbolsDynPatternSimStr(benchmark::State& state) { stra source = @@ -2648,7 +2688,7 @@ void ShortReplaceSymbolsDynPatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(source); benchmark::DoNotOptimize(repl); } -}188192347389847
    176190369374669
    Short replace const symbols with string expressions and without remembering all search resultstemplate<bool UseVector> void ShortReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { stra source = @@ -2677,7 +2717,7 @@ void ShortReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}146165218248626
    142159223252440
    Short replace const symbols with string expressions and memorization of all search resultstemplate<bool UseVector> void ShortReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { stra source = @@ -2706,18 +2746,18 @@ void ShortReplaceSymbolsCons2PatternSimStr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}150153301354706
    -

    Replace All Str To Longer Size

    +

    Replace All Str To Longer Size

    +} +} +} +} +} +} +} +} +} +} +} +} +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    replace bb to ---- in std::string|64template<size_t Long> void ReplaceAllLongerStdString(benchmark::State& state) { @@ -2732,7 +2772,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { big_source += source; big_sample += sample; } - + for (auto _: state) { std::string result{big_source}; size_t start_pos = 0; @@ -2751,7 +2791,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}161162238245832
    164174236248759
    replace bb to ---- in std::string|256template<size_t Long> void ReplaceAllLongerStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -2765,7 +2805,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { big_source += source; big_sample += sample; } - + for (auto _: state) { std::string result{big_source}; size_t start_pos = 0; @@ -2784,7 +2824,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}5414937798522559
    5315117808072371
    replace bb to ---- in std::string|512template<size_t Long> void ReplaceAllLongerStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -2798,7 +2838,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { big_source += source; big_sample += sample; } - + for (auto _: state) { std::string result{big_source}; size_t start_pos = 0; @@ -2817,7 +2857,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}1075993145015344466
    12171180144915514397
    replace bb to ---- in std::string|1024template<size_t Long> void ReplaceAllLongerStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -2831,7 +2871,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { big_source += source; big_sample += sample; } - + for (auto _: state) { std::string result{big_source}; size_t start_pos = 0; @@ -2850,7 +2890,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}23442333324633818916
    23742244323936228983
    replace bb to ---- in std::string|2048template<size_t Long> void ReplaceAllLongerStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -2864,7 +2904,7 @@ void ReplaceAllLongerStdString(benchmark::State& state) { big_source += source; big_sample += sample; } - + for (auto _: state) { std::string result{big_source}; size_t start_pos = 0; @@ -2883,12 +2923,12 @@ void ReplaceAllLongerStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}636663598153808119324
    573560098127825120059
    replace bb to ---- in lstringa<8>|64template<size_t N, size_t Count> void ReplaceAllLongerSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -2905,12 +2945,12 @@ void ReplaceAllLongerSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}145167343349749
    145154336331734
    replace bb to ---- in lstringa<8>|256template<size_t N, size_t Count> void ReplaceAllLongerSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -2927,12 +2967,12 @@ void ReplaceAllLongerSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}4384956457022053
    4354596596852096
    replace bb to ---- in lstringa<8>|512template<size_t N, size_t Count> void ReplaceAllLongerSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -2949,12 +2989,12 @@ void ReplaceAllLongerSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}824922108011873754
    825850109111983770
    replace bb to ---- in lstringa<8>|1024template<size_t N, size_t Count> void ReplaceAllLongerSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -2971,12 +3011,12 @@ void ReplaceAllLongerSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}16621862191620876775
    17131775193721077288
    replace bb to ---- in lstringa<8>|2048template<size_t N, size_t Count> void ReplaceAllLongerSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -2993,12 +3033,12 @@ void ReplaceAllLongerSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}310835513650403913478
    305533223647406513342
    replace bb to ---- by init stringa|64template<size_t Count> void ReplaceAllLongerSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3014,12 +3054,12 @@ void ReplaceAllLongerSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}116121216230503
    117124212230498
    replace bb to ---- by init stringa|256template<size_t Count> void ReplaceAllLongerSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3035,12 +3075,12 @@ void ReplaceAllLongerSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}3894445485731848
    3984835595821896
    replace bb to ---- by init stringa|512template<size_t Count> void ReplaceAllLongerSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3056,12 +3096,12 @@ void ReplaceAllLongerSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}79782794110093537
    803888103510073611
    replace bb to ---- by init stringa|1024template<size_t Count> void ReplaceAllLongerSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3077,12 +3117,12 @@ void ReplaceAllLongerSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}16291637177519886923
    16241787185019136933
    replace bb to ---- by init stringa|2048template<size_t Count> void ReplaceAllLongerSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa----baaaaaaaa--------aaaaabaaaaaaaaaaaaaaaaaaaaa----a"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3098,26 +3138,26 @@ void ReplaceAllLongerSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}312532803478379013739
    -

    Replace All Str To Same Size

    +

    Replace All Str To Same Size

    +} +} +} +} +} +} +} +} +} +} +} +} +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    replace bb to -- in std::string|64template<size_t Long> void ReplaceAllEqualStdString(benchmark::State& state) { @@ -3150,7 +3190,7 @@ void ReplaceAllEqualStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}129125196218570
    119118192206545
    replace bb to -- in std::string|256template<size_t Long> void ReplaceAllEqualStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3182,7 +3222,7 @@ void ReplaceAllEqualStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}4044055035391885
    4153704955331885
    replace bb to -- in std::string|512template<size_t Long> void ReplaceAllEqualStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3214,7 +3254,7 @@ void ReplaceAllEqualStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}8157808649793523
    7837398549683368
    replace bb to -- in std::string|1024template<size_t Long> void ReplaceAllEqualStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3246,7 +3286,7 @@ void ReplaceAllEqualStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}14891446170018856916
    14991423167018406925
    replace bb to -- in std::string|2048template<size_t Long> void ReplaceAllEqualStdString(benchmark::State& state) { std::string_view source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3278,7 +3318,7 @@ void ReplaceAllEqualStdString(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}310031383239357613510
    296028983178364113051
    replace bb to -- in lstringa<8>|64template<size_t N, size_t Long> void ReplaceAllEqualSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3299,7 +3339,7 @@ void ReplaceAllEqualSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}101103192202482
    10199.1192200483
    replace bb to -- in lstringa<8>|256template<size_t N, size_t Long> void ReplaceAllEqualSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3320,7 +3360,7 @@ void ReplaceAllEqualSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}3023014524701565
    3263014464751542
    replace bb to -- in lstringa<8>|512template<size_t N, size_t Long> void ReplaceAllEqualSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3341,7 +3381,7 @@ void ReplaceAllEqualSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}5795487978162921
    5695667898162827
    replace bb to -- in lstringa<8>|1024template<size_t N, size_t Long> void ReplaceAllEqualSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3362,7 +3402,7 @@ void ReplaceAllEqualSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}11811112144415155594
    11281104152615085568
    replace bb to -- in lstringa<8>|2048template<size_t N, size_t Long> void ReplaceAllEqualSimString(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; @@ -3383,14 +3423,14 @@ void ReplaceAllEqualSimString(benchmark::State& state) { benchmark::DoNotOptimize(result); benchmark::DoNotOptimize(source); } -}218121052839290910928
    215520882820296910863
    replace bb to -- by init stringa|64template<size_t Count> void ReplaceAllEqualSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa--baaaaaaaa----aaaaabaaaaaaaaaaaaaaaaaaaaa--a"; ssa pattern = "bb"; ssa repl = "--"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3408,14 +3448,14 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}82.991.4167183366
    86.999.6162192363
    replace bb to -- by init stringa|256template<size_t Count> void ReplaceAllEqualSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa--baaaaaaaa----aaaaabaaaaaaaaaaaaaaaaaaaaa--a"; ssa pattern = "bb"; ssa repl = "--"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3433,14 +3473,14 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}2192613523921224
    2322743543921249
    replace bb to -- by init stringa|512template<size_t Count> void ReplaceAllEqualSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa--baaaaaaaa----aaaaabaaaaaaaaaaaaaaaaaaaaa--a"; ssa pattern = "bb"; ssa repl = "--"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3458,14 +3498,14 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}4474855986682221
    4415276006602243
    replace bb to -- by init stringa|1024template<size_t Count> void ReplaceAllEqualSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa--baaaaaaaa----aaaaabaaaaaaaaaaaaaaaaaaaaa--a"; ssa pattern = "bb"; ssa repl = "--"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3483,14 +3523,14 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}880984108212014235
    8831029107911964204
    replace bb to -- by init stringa|2048template<size_t Count> void ReplaceAllEqualSimStringExpr(benchmark::State& state) { ssa source = "aaaaaaaaaaaaaaaaaaabbbaaaaaaaabbbbaaaaabaaaaaaaaaaaaaaaaaaaaabba"; ssa sample = "aaaaaaaaaaaaaaaaaaa--baaaaaaaa----aaaaabaaaaaaaaaaaaaaaaaaaaa--a"; ssa pattern = "bb"; ssa repl = "--"; - + lstringa<2048> big_source{Count, source}, big_sample{Count, sample}; for (auto _: state) { @@ -3508,26 +3548,26 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(pattern); benchmark::DoNotOptimize(repl); } -}16541862196322958496
    -

    Hash Map insert and find

    +

    Hash Map insert and find

    +символов, а потом ищем их в ней +} +} -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    hashStrMapA<size_t> emplace & find stringa;void HashMapSimStr(benchmark::State& state) { for (auto _: state) { @@ -3552,7 +3592,7 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { } } } >> Вставляем в hashStrMapA 10000 stringa длиной от 30 до 50 -символов, а потом ищем их в ней37189003769704414490042373355327536
    35650513720924385288642702255371717
    std::unordered_map<std::string, size_t> emplace & find std::string;void HashMapStdStr(benchmark::State& state) { for (auto _: state) { std::unordered_map<std::string, size_t> store; @@ -3575,7 +3615,7 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(res); } } -} >> То же самое c std::string и std::unordered_map36914423652417598496254680196172235
     >> То же самое c std::string и std::unordered_map35045813624563532983753850505883527
    hashStrMapA<size_t> emplace & find ssa;void HashMapSimSsa(benchmark::State& state) { for (auto _: state) { hashStrMapA<size_t> store; @@ -3599,7 +3639,7 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(res); } } -} >> Теперь вставляем stringa, а ищем ssa37198443800957398370839909215318092
     >> Теперь вставляем stringa, а ищем ssa36487333730268351104639537905376097
    std::unordered_map<std::string, size_t> emplace & find std::string_view;void HashMapStdStrView(benchmark::State& state) { for (auto _: state) { std::unordered_map<std::string, size_t> store; @@ -3623,15 +3663,15 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { benchmark::DoNotOptimize(res); } } -} >> Вставляем std::string, а ищем std::string_view41157864103196703027663046517002408
    -

    Build Full Func Name

    +

    Build Full Func Name

    +возвращаемого значения. Алгоритм на std::string. ++= к строке заменены на одно += + + +. +} +Инфа о параметрах добавляется в текущую строку -
    Benchmark nameCommentXeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13Xeon E5-2682 v4, Windows 10, Clang-19Xeon E5-2682 v4, Windows 10, MSVC-19Xeon E5-2682 v4, WASM Chrome, Clang-21
    Build func full name std::string;std::string build_full_name_std() const { std::string str{has_ret_type_resolver ? "any"sv : type_names_sv[(unsigned)ret_type]}; @@ -3666,7 +3706,7 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { } >> Обыденная задача, подобные часто могут встретится в работе: По неким данным сгенерировать текст. В этом случае по данным о неких функциях сформировать их полное имя с типами параметров и -возвращаемого значения. Алгоритм на std::string.733949158816605576
    7331031158116514861
    Build func full name std::string 1;std::string build_full_name_std1() const { std::string str{has_ret_type_resolver ? "any"sv : type_names_sv[(unsigned)ret_type]}; str += " " + std_name + "("; @@ -3696,7 +3736,7 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { //std::cout << "Len=" << str.length() << ", Cap=" << str.capacity() << "\n"; return str; } >> Почти тот же алгоритм, но несколько последовательных -+= к строке заменены на одно += + + +.8371025164817475877
    829999165417065220
    Build func full name std::stream;std::string build_full_name_stream() const { std::ostringstream str; if (has_ret_type_resolver) { @@ -3729,7 +3769,7 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { } str << ")"; return str.str(); -} >> Строим имя функции через std::ostringstream и <<2608265410979994216604
     >> Строим имя функции через std::ostringstream и <<255426268195995016474
    Build func full name stringa;stringa build_full_name() const { lstringa<512> str = e_choice(has_ret_type_resolver, "any", type_names[(unsigned)ret_type]) + " " + name + "("; @@ -3745,7 +3785,7 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { } return str + e_if(unlim_params, e_if(add_comma, ", ") + "...") + ")"; } >> Реализация на simstr строках и строковых выражениях. -Инфа о параметрах добавляется в текущую строку5125008478912780
    5256028599482853
    Build func full name stringa 1;stringa build_full_name1() const { lstringa<512> str = e_choice(has_ret_type_resolver, "any", type_names[(unsigned)ret_type]) + " " + name + "("; @@ -3759,11 +3799,11 @@ void ReplaceAllEqualSimStringExpr(benchmark::State& state) { } >> Реализация на simstr строках и строковых выражениях. Инфа о параметрах добавляется во временную строку, а потом разом добавляется в текущую строку. Позволяет операции в цикле -записать в одну строку, но чуть проигрывает по времени выполнения.657716100310073249
    +записать в одну строку, но чуть проигрывает по времени выполнения.672674101511083292 +
    \ No newline at end of file diff --git a/bench/results/000-Xeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21.txt b/bench/results/000-Xeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21.txt index 02c102d..761ffff 100644 --- a/bench/results/000-Xeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21.txt +++ b/bench/results/000-Xeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21.txt @@ -1,4 +1,4 @@ -2025-08-06T14:11:08+03:00 +2025-11-26T18:35:01+03:00 Running ./benchStr Run on (32 X 2494.22 MHz CPU s) CPU Caches: @@ -6,773 +6,786 @@ CPU Caches: L1 Instruction 32 KiB (x16) L2 Unified 256 KiB (x16) L3 Unified 40960 KiB (x1) -Load Average: 0.49, 0.86, 0.76 +Load Average: 0.10, 0.62, 0.73 -------------------------------------------------------------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------------------------------------------------------------- ------ Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e;_mean 1.13 ns 1.13 ns 10 -std::string e;_median 1.13 ns 1.13 ns 10 -std::string e;_stddev 0.014 ns 0.014 ns 10 -std::string e;_cv 1.23 % 1.23 % 10 -std::string_view e;_mean 0.372 ns 0.372 ns 10 -std::string_view e;_median 0.373 ns 0.373 ns 10 -std::string_view e;_stddev 0.007 ns 0.007 ns 10 -std::string_view e;_cv 1.77 % 1.77 % 10 -ssa e;_mean 0.375 ns 0.375 ns 10 -ssa e;_median 0.372 ns 0.372 ns 10 -ssa e;_stddev 0.012 ns 0.012 ns 10 -ssa e;_cv 3.21 % 3.21 % 10 -stringa e;_mean 0.757 ns 0.757 ns 10 -stringa e;_median 0.753 ns 0.753 ns 10 -stringa e;_stddev 0.011 ns 0.011 ns 10 -stringa e;_cv 1.45 % 1.45 % 10 -lstringa<20> e;_mean 1.16 ns 1.16 ns 10 -lstringa<20> e;_median 1.16 ns 1.16 ns 10 -lstringa<20> e;_stddev 0.029 ns 0.029 ns 10 -lstringa<20> e;_cv 2.46 % 2.46 % 10 -lstringa<40> e;_mean 1.14 ns 1.14 ns 10 +----- Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e;_mean 1.11 ns 1.11 ns 10 +std::string e;_median 1.12 ns 1.12 ns 10 +std::string e;_stddev 0.017 ns 0.017 ns 10 +std::string e;_cv 1.53 % 1.53 % 10 +std::string_view e;_mean 0.369 ns 0.369 ns 10 +std::string_view e;_median 0.369 ns 0.369 ns 10 +std::string_view e;_stddev 0.005 ns 0.005 ns 10 +std::string_view e;_cv 1.43 % 1.43 % 10 +ssa e;_mean 0.369 ns 0.369 ns 10 +ssa e;_median 0.366 ns 0.366 ns 10 +ssa e;_stddev 0.011 ns 0.011 ns 10 +ssa e;_cv 2.92 % 2.92 % 10 +stringa e;_mean 0.742 ns 0.742 ns 10 +stringa e;_median 0.744 ns 0.744 ns 10 +stringa e;_stddev 0.013 ns 0.013 ns 10 +stringa e;_cv 1.75 % 1.75 % 10 +lstringa<20> e;_mean 1.13 ns 1.13 ns 10 +lstringa<20> e;_median 1.13 ns 1.13 ns 10 +lstringa<20> e;_stddev 0.046 ns 0.046 ns 10 +lstringa<20> e;_cv 4.10 % 4.10 % 10 +lstringa<40> e;_mean 1.13 ns 1.13 ns 10 lstringa<40> e;_median 1.14 ns 1.14 ns 10 -lstringa<40> e;_stddev 0.013 ns 0.013 ns 10 -lstringa<40> e;_cv 1.14 % 1.14 % 10 ------ Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text";_mean 1.88 ns 1.88 ns 10 -std::string e = "Test text";_median 1.88 ns 1.88 ns 10 -std::string e = "Test text";_stddev 0.017 ns 0.017 ns 10 -std::string e = "Test text";_cv 0.91 % 0.91 % 10 -std::string_view e = "Test text";_mean 0.746 ns 0.746 ns 10 -std::string_view e = "Test text";_median 0.748 ns 0.748 ns 10 -std::string_view e = "Test text";_stddev 0.008 ns 0.008 ns 10 -std::string_view e = "Test text";_cv 1.04 % 1.04 % 10 -ssa e = "Test text";_mean 0.377 ns 0.377 ns 10 +lstringa<40> e;_stddev 0.025 ns 0.025 ns 10 +lstringa<40> e;_cv 2.23 % 2.23 % 10 +----- Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text";_mean 1.91 ns 1.91 ns 10 +std::string e = "Test text";_median 1.90 ns 1.90 ns 10 +std::string e = "Test text";_stddev 0.098 ns 0.098 ns 10 +std::string e = "Test text";_cv 5.10 % 5.10 % 10 +std::string_view e = "Test text";_mean 0.748 ns 0.748 ns 10 +std::string_view e = "Test text";_median 0.751 ns 0.751 ns 10 +std::string_view e = "Test text";_stddev 0.012 ns 0.012 ns 10 +std::string_view e = "Test text";_cv 1.56 % 1.56 % 10 +ssa e = "Test text";_mean 0.374 ns 0.374 ns 10 ssa e = "Test text";_median 0.373 ns 0.373 ns 10 -ssa e = "Test text";_stddev 0.017 ns 0.017 ns 10 -ssa e = "Test text";_cv 4.49 % 4.49 % 10 -stringa e = "Test text";_mean 1.12 ns 1.12 ns 10 -stringa e = "Test text";_median 1.12 ns 1.12 ns 10 -stringa e = "Test text";_stddev 0.016 ns 0.016 ns 10 -stringa e = "Test text";_cv 1.42 % 1.42 % 10 -lstringa<20> e = "Test text";_mean 1.89 ns 1.89 ns 10 -lstringa<20> e = "Test text";_median 1.90 ns 1.90 ns 10 -lstringa<20> e = "Test text";_stddev 0.030 ns 0.030 ns 10 -lstringa<20> e = "Test text";_cv 1.61 % 1.61 % 10 -lstringa<40> e = "Test text";_mean 1.90 ns 1.90 ns 10 -lstringa<40> e = "Test text";_median 1.90 ns 1.90 ns 10 -lstringa<40> e = "Test text";_stddev 0.024 ns 0.024 ns 10 -lstringa<40> e = "Test text";_cv 1.27 % 1.27 % 10 ------ Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890";_mean 19.5 ns 19.5 ns 10 -std::string e = "123456789012345678901234567890";_median 19.5 ns 19.5 ns 10 -std::string e = "123456789012345678901234567890";_stddev 0.423 ns 0.423 ns 10 -std::string e = "123456789012345678901234567890";_cv 2.17 % 2.17 % 10 -std::string_view e = "123456789012345678901234567890";_mean 0.758 ns 0.758 ns 10 -std::string_view e = "123456789012345678901234567890";_median 0.761 ns 0.761 ns 10 -std::string_view e = "123456789012345678901234567890";_stddev 0.012 ns 0.012 ns 10 -std::string_view e = "123456789012345678901234567890";_cv 1.56 % 1.56 % 10 -ssa e = "123456789012345678901234567890";_mean 0.376 ns 0.376 ns 10 +ssa e = "Test text";_stddev 0.008 ns 0.008 ns 10 +ssa e = "Test text";_cv 2.18 % 2.18 % 10 +stringa e = "Test text";_mean 1.11 ns 1.11 ns 10 +stringa e = "Test text";_median 1.11 ns 1.11 ns 10 +stringa e = "Test text";_stddev 0.045 ns 0.045 ns 10 +stringa e = "Test text";_cv 4.03 % 4.03 % 10 +lstringa<20> e = "Test text";_mean 1.88 ns 1.88 ns 10 +lstringa<20> e = "Test text";_median 1.87 ns 1.87 ns 10 +lstringa<20> e = "Test text";_stddev 0.034 ns 0.034 ns 10 +lstringa<20> e = "Test text";_cv 1.79 % 1.79 % 10 +lstringa<40> e = "Test text";_mean 1.86 ns 1.86 ns 10 +lstringa<40> e = "Test text";_median 1.86 ns 1.86 ns 10 +lstringa<40> e = "Test text";_stddev 0.045 ns 0.045 ns 10 +lstringa<40> e = "Test text";_cv 2.41 % 2.41 % 10 +----- Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890";_mean 18.8 ns 18.8 ns 10 +std::string e = "123456789012345678901234567890";_median 18.8 ns 18.8 ns 10 +std::string e = "123456789012345678901234567890";_stddev 0.316 ns 0.316 ns 10 +std::string e = "123456789012345678901234567890";_cv 1.68 % 1.68 % 10 +std::string_view e = "123456789012345678901234567890";_mean 0.747 ns 0.747 ns 10 +std::string_view e = "123456789012345678901234567890";_median 0.747 ns 0.747 ns 10 +std::string_view e = "123456789012345678901234567890";_stddev 0.009 ns 0.009 ns 10 +std::string_view e = "123456789012345678901234567890";_cv 1.14 % 1.14 % 10 +ssa e = "123456789012345678901234567890";_mean 0.373 ns 0.373 ns 10 ssa e = "123456789012345678901234567890";_median 0.375 ns 0.375 ns 10 -ssa e = "123456789012345678901234567890";_stddev 0.009 ns 0.009 ns 10 -ssa e = "123456789012345678901234567890";_cv 2.36 % 2.36 % 10 +ssa e = "123456789012345678901234567890";_stddev 0.004 ns 0.004 ns 10 +ssa e = "123456789012345678901234567890";_cv 1.18 % 1.18 % 10 stringa e = "123456789012345678901234567890";_mean 1.13 ns 1.13 ns 10 -stringa e = "123456789012345678901234567890";_median 1.13 ns 1.13 ns 10 -stringa e = "123456789012345678901234567890";_stddev 0.015 ns 0.015 ns 10 -stringa e = "123456789012345678901234567890";_cv 1.32 % 1.32 % 10 -lstringa<20> e = "123456789012345678901234567890";_mean 20.5 ns 20.5 ns 10 -lstringa<20> e = "123456789012345678901234567890";_median 20.6 ns 20.6 ns 10 -lstringa<20> e = "123456789012345678901234567890";_stddev 0.419 ns 0.419 ns 10 -lstringa<20> e = "123456789012345678901234567890";_cv 2.05 % 2.05 % 10 -lstringa<40> e = "123456789012345678901234567890";_mean 1.90 ns 1.90 ns 10 -lstringa<40> e = "123456789012345678901234567890";_median 1.90 ns 1.90 ns 10 -lstringa<40> e = "123456789012345678901234567890";_stddev 0.020 ns 0.020 ns 10 -lstringa<40> e = "123456789012345678901234567890";_cv 1.06 % 1.06 % 10 ------ Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text"; auto c{e};_mean 5.73 ns 5.73 ns 10 -std::string e = "Test text"; auto c{e};_median 5.73 ns 5.73 ns 10 -std::string e = "Test text"; auto c{e};_stddev 0.039 ns 0.039 ns 10 -std::string e = "Test text"; auto c{e};_cv 0.69 % 0.69 % 10 -std::string_view e = "Test text"; auto c{e};_mean 0.381 ns 0.381 ns 10 -std::string_view e = "Test text"; auto c{e};_median 0.383 ns 0.383 ns 10 -std::string_view e = "Test text"; auto c{e};_stddev 0.011 ns 0.011 ns 10 -std::string_view e = "Test text"; auto c{e};_cv 2.78 % 2.78 % 10 +stringa e = "123456789012345678901234567890";_median 1.12 ns 1.12 ns 10 +stringa e = "123456789012345678901234567890";_stddev 0.024 ns 0.024 ns 10 +stringa e = "123456789012345678901234567890";_cv 2.12 % 2.12 % 10 +lstringa<20> e = "123456789012345678901234567890";_mean 21.2 ns 21.2 ns 10 +lstringa<20> e = "123456789012345678901234567890";_median 21.1 ns 21.1 ns 10 +lstringa<20> e = "123456789012345678901234567890";_stddev 0.428 ns 0.418 ns 10 +lstringa<20> e = "123456789012345678901234567890";_cv 2.02 % 1.98 % 10 +lstringa<40> e = "123456789012345678901234567890";_mean 2.57 ns 2.57 ns 10 +lstringa<40> e = "123456789012345678901234567890";_median 2.56 ns 2.56 ns 10 +lstringa<40> e = "123456789012345678901234567890";_stddev 0.051 ns 0.051 ns 10 +lstringa<40> e = "123456789012345678901234567890";_cv 1.98 % 1.98 % 10 +----- Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text"; auto c{e};_mean 4.98 ns 4.98 ns 10 +std::string e = "Test text"; auto c{e};_median 4.98 ns 4.98 ns 10 +std::string e = "Test text"; auto c{e};_stddev 0.126 ns 0.126 ns 10 +std::string e = "Test text"; auto c{e};_cv 2.53 % 2.53 % 10 +std::string_view e = "Test text"; auto c{e};_mean 0.373 ns 0.373 ns 10 +std::string_view e = "Test text"; auto c{e};_median 0.373 ns 0.373 ns 10 +std::string_view e = "Test text"; auto c{e};_stddev 0.004 ns 0.004 ns 10 +std::string_view e = "Test text"; auto c{e};_cv 1.20 % 1.20 % 10 ssa e = "Test text"; auto c{e};_mean 0.376 ns 0.376 ns 10 -ssa e = "Test text"; auto c{e};_median 0.376 ns 0.376 ns 10 -ssa e = "Test text"; auto c{e};_stddev 0.005 ns 0.005 ns 10 -ssa e = "Test text"; auto c{e};_cv 1.44 % 1.44 % 10 -stringa e = "Test text"; auto c{e};_mean 1.12 ns 1.12 ns 10 -stringa e = "Test text"; auto c{e};_median 1.12 ns 1.12 ns 10 -stringa e = "Test text"; auto c{e};_stddev 0.018 ns 0.018 ns 10 -stringa e = "Test text"; auto c{e};_cv 1.57 % 1.57 % 10 -lstringa<20> e = "Test text"; auto c{e};_mean 5.00 ns 5.00 ns 10 -lstringa<20> e = "Test text"; auto c{e};_median 4.97 ns 4.97 ns 10 -lstringa<20> e = "Test text"; auto c{e};_stddev 0.196 ns 0.196 ns 10 -lstringa<20> e = "Test text"; auto c{e};_cv 3.92 % 3.92 % 10 -lstringa<40> e = "Test text"; auto c{e};_mean 4.62 ns 4.62 ns 10 -lstringa<40> e = "Test text"; auto c{e};_median 4.60 ns 4.60 ns 10 -lstringa<40> e = "Test text"; auto c{e};_stddev 0.087 ns 0.087 ns 10 -lstringa<40> e = "Test text"; auto c{e};_cv 1.88 % 1.88 % 10 ------ Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890"; auto c{e};_mean 19.8 ns 19.8 ns 10 +ssa e = "Test text"; auto c{e};_median 0.373 ns 0.373 ns 10 +ssa e = "Test text"; auto c{e};_stddev 0.017 ns 0.017 ns 10 +ssa e = "Test text"; auto c{e};_cv 4.60 % 4.60 % 10 +stringa e = "Test text"; auto c{e};_mean 1.13 ns 1.13 ns 10 +stringa e = "Test text"; auto c{e};_median 1.13 ns 1.13 ns 10 +stringa e = "Test text"; auto c{e};_stddev 0.048 ns 0.048 ns 10 +stringa e = "Test text"; auto c{e};_cv 4.29 % 4.29 % 10 +lstringa<20> e = "Test text"; auto c{e};_mean 4.84 ns 4.84 ns 10 +lstringa<20> e = "Test text"; auto c{e};_median 4.85 ns 4.85 ns 10 +lstringa<20> e = "Test text"; auto c{e};_stddev 0.070 ns 0.070 ns 10 +lstringa<20> e = "Test text"; auto c{e};_cv 1.44 % 1.44 % 10 +lstringa<40> e = "Test text"; auto c{e};_mean 4.53 ns 4.53 ns 10 +lstringa<40> e = "Test text"; auto c{e};_median 4.51 ns 4.51 ns 10 +lstringa<40> e = "Test text"; auto c{e};_stddev 0.109 ns 0.109 ns 10 +lstringa<40> e = "Test text"; auto c{e};_cv 2.41 % 2.41 % 10 +----- Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890"; auto c{e};_mean 19.6 ns 19.6 ns 10 std::string e = "123456789012345678901234567890"; auto c{e};_median 19.7 ns 19.7 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_stddev 0.324 ns 0.324 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_cv 1.64 % 1.64 % 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 0.763 ns 0.763 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_median 0.762 ns 0.762 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.010 ns 0.010 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 1.34 % 1.34 % 10 +std::string e = "123456789012345678901234567890"; auto c{e};_stddev 0.423 ns 0.423 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_cv 2.16 % 2.16 % 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 0.748 ns 0.748 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_median 0.740 ns 0.740 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.022 ns 0.022 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 2.88 % 2.88 % 10 ssa e = "123456789012345678901234567890"; auto c{e};_mean 0.373 ns 0.373 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_median 0.374 ns 0.374 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.005 ns 0.005 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_cv 1.34 % 1.34 % 10 -stringa e = "123456789012345678901234567890"; auto c{e};_mean 1.14 ns 1.14 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_median 0.371 ns 0.371 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.007 ns 0.007 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_cv 2.00 % 2.00 % 10 +stringa e = "123456789012345678901234567890"; auto c{e};_mean 1.13 ns 1.13 ns 10 stringa e = "123456789012345678901234567890"; auto c{e};_median 1.13 ns 1.13 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.032 ns 0.032 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_cv 2.85 % 2.85 % 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 20.2 ns 20.2 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 20.2 ns 20.2 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 0.221 ns 0.221 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 1.10 % 1.10 % 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 4.68 ns 4.68 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 4.61 ns 4.61 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.202 ns 0.202 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 4.32 % 4.32 % 10 ------ Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find;_mean 7.73 ns 7.73 ns 10 -std::string::find;_median 7.71 ns 7.71 ns 10 -std::string::find;_stddev 0.128 ns 0.128 ns 10 -std::string::find;_cv 1.66 % 1.66 % 10 -std::string_view::find;_mean 7.25 ns 7.25 ns 10 -std::string_view::find;_median 7.28 ns 7.28 ns 10 -std::string_view::find;_stddev 0.083 ns 0.083 ns 10 -std::string_view::find;_cv 1.15 % 1.15 % 10 -ssa::find;_mean 6.91 ns 6.91 ns 10 -ssa::find;_median 6.93 ns 6.93 ns 10 -ssa::find;_stddev 0.115 ns 0.115 ns 10 -ssa::find;_cv 1.66 % 1.66 % 10 -stringa::find;_mean 8.10 ns 8.10 ns 10 -stringa::find;_median 8.07 ns 8.08 ns 10 -stringa::find;_stddev 0.122 ns 0.122 ns 10 -stringa::find;_cv 1.51 % 1.51 % 10 -lstringa<20>::find;_mean 6.91 ns 6.91 ns 10 -lstringa<20>::find;_median 6.91 ns 6.91 ns 10 -lstringa<20>::find;_stddev 0.154 ns 0.154 ns 10 -lstringa<20>::find;_cv 2.23 % 2.23 % 10 -lstringa<40>::find;_mean 6.92 ns 6.92 ns 10 -lstringa<40>::find;_median 6.93 ns 6.93 ns 10 -lstringa<40>::find;_stddev 0.172 ns 0.172 ns 10 -lstringa<40>::find;_cv 2.49 % 2.49 % 10 -------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string copy{str_with_len_N};/15_mean 5.87 ns 5.87 ns 10 -std::string copy{str_with_len_N};/15_median 5.87 ns 5.87 ns 10 -std::string copy{str_with_len_N};/15_stddev 0.085 ns 0.085 ns 10 -std::string copy{str_with_len_N};/15_cv 1.44 % 1.44 % 10 -std::string copy{str_with_len_N};/16_mean 23.5 ns 23.5 ns 10 -std::string copy{str_with_len_N};/16_median 23.4 ns 23.4 ns 10 -std::string copy{str_with_len_N};/16_stddev 0.447 ns 0.447 ns 10 -std::string copy{str_with_len_N};/16_cv 1.91 % 1.91 % 10 -std::string copy{str_with_len_N};/23_mean 23.6 ns 23.6 ns 10 -std::string copy{str_with_len_N};/23_median 23.4 ns 23.4 ns 10 -std::string copy{str_with_len_N};/23_stddev 0.709 ns 0.709 ns 10 -std::string copy{str_with_len_N};/23_cv 3.00 % 3.00 % 10 -std::string copy{str_with_len_N};/24_mean 23.7 ns 23.7 ns 10 -std::string copy{str_with_len_N};/24_median 23.3 ns 23.3 ns 10 -std::string copy{str_with_len_N};/24_stddev 1.24 ns 1.24 ns 10 -std::string copy{str_with_len_N};/24_cv 5.26 % 5.26 % 10 -std::string copy{str_with_len_N};/32_mean 23.1 ns 23.1 ns 10 -std::string copy{str_with_len_N};/32_median 23.3 ns 23.3 ns 10 -std::string copy{str_with_len_N};/32_stddev 0.601 ns 0.601 ns 10 -std::string copy{str_with_len_N};/32_cv 2.60 % 2.60 % 10 -std::string copy{str_with_len_N};/64_mean 23.1 ns 23.1 ns 10 -std::string copy{str_with_len_N};/64_median 23.1 ns 23.1 ns 10 -std::string copy{str_with_len_N};/64_stddev 0.397 ns 0.397 ns 10 -std::string copy{str_with_len_N};/64_cv 1.72 % 1.72 % 10 -std::string copy{str_with_len_N};/128_mean 25.4 ns 25.4 ns 10 -std::string copy{str_with_len_N};/128_median 25.2 ns 25.2 ns 10 -std::string copy{str_with_len_N};/128_stddev 0.566 ns 0.566 ns 10 -std::string copy{str_with_len_N};/128_cv 2.23 % 2.23 % 10 -std::string copy{str_with_len_N};/256_mean 25.5 ns 25.5 ns 10 -std::string copy{str_with_len_N};/256_median 25.5 ns 25.5 ns 10 -std::string copy{str_with_len_N};/256_stddev 0.397 ns 0.397 ns 10 -std::string copy{str_with_len_N};/256_cv 1.55 % 1.55 % 10 -std::string copy{str_with_len_N};/512_mean 30.4 ns 30.4 ns 10 -std::string copy{str_with_len_N};/512_median 30.2 ns 30.2 ns 10 -std::string copy{str_with_len_N};/512_stddev 0.955 ns 0.955 ns 10 -std::string copy{str_with_len_N};/512_cv 3.14 % 3.14 % 10 -std::string copy{str_with_len_N};/1024_mean 39.0 ns 39.0 ns 10 -std::string copy{str_with_len_N};/1024_median 39.0 ns 39.0 ns 10 -std::string copy{str_with_len_N};/1024_stddev 0.363 ns 0.363 ns 10 -std::string copy{str_with_len_N};/1024_cv 0.93 % 0.93 % 10 -std::string copy{str_with_len_N};/2048_mean 111 ns 111 ns 10 -std::string copy{str_with_len_N};/2048_median 110 ns 110 ns 10 -std::string copy{str_with_len_N};/2048_stddev 5.75 ns 5.75 ns 10 -std::string copy{str_with_len_N};/2048_cv 5.17 % 5.17 % 10 -std::string copy{str_with_len_N};/4096_mean 142 ns 142 ns 10 -std::string copy{str_with_len_N};/4096_median 144 ns 144 ns 10 -std::string copy{str_with_len_N};/4096_stddev 7.30 ns 7.30 ns 10 -std::string copy{str_with_len_N};/4096_cv 5.14 % 5.14 % 10 +stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.024 ns 0.024 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_cv 2.10 % 2.10 % 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 20.0 ns 20.0 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 20.1 ns 20.1 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 0.383 ns 0.383 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 1.91 % 1.91 % 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 5.40 ns 5.40 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 5.43 ns 5.43 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.065 ns 0.065 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 1.20 % 1.20 % 10 +----- Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find;_mean 6.87 ns 6.86 ns 10 +std::string::find;_median 6.86 ns 6.85 ns 10 +std::string::find;_stddev 0.076 ns 0.077 ns 10 +std::string::find;_cv 1.11 % 1.12 % 10 +std::string_view::find;_mean 7.75 ns 7.75 ns 10 +std::string_view::find;_median 7.71 ns 7.71 ns 10 +std::string_view::find;_stddev 0.370 ns 0.370 ns 10 +std::string_view::find;_cv 4.77 % 4.77 % 10 +ssa::find;_mean 6.96 ns 6.96 ns 10 +ssa::find;_median 6.82 ns 6.82 ns 10 +ssa::find;_stddev 0.484 ns 0.484 ns 10 +ssa::find;_cv 6.96 % 6.96 % 10 +stringa::find;_mean 7.38 ns 7.38 ns 10 +stringa::find;_median 7.33 ns 7.33 ns 10 +stringa::find;_stddev 0.301 ns 0.301 ns 10 +stringa::find;_cv 4.08 % 4.08 % 10 +lstringa<20>::find;_mean 6.90 ns 6.90 ns 10 +lstringa<20>::find;_median 6.84 ns 6.84 ns 10 +lstringa<20>::find;_stddev 0.269 ns 0.269 ns 10 +lstringa<20>::find;_cv 3.90 % 3.90 % 10 +lstringa<40>::find;_mean 6.83 ns 6.83 ns 10 +lstringa<40>::find;_median 6.84 ns 6.84 ns 10 +lstringa<40>::find;_stddev 0.127 ns 0.127 ns 10 +lstringa<40>::find;_cv 1.86 % 1.86 % 10 +------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string copy{str_with_len_N};/15_mean 4.90 ns 4.90 ns 10 +std::string copy{str_with_len_N};/15_median 4.90 ns 4.90 ns 10 +std::string copy{str_with_len_N};/15_stddev 0.110 ns 0.110 ns 10 +std::string copy{str_with_len_N};/15_cv 2.23 % 2.23 % 10 +std::string copy{str_with_len_N};/16_mean 23.1 ns 23.1 ns 10 +std::string copy{str_with_len_N};/16_median 22.8 ns 22.8 ns 10 +std::string copy{str_with_len_N};/16_stddev 2.01 ns 2.01 ns 10 +std::string copy{str_with_len_N};/16_cv 8.69 % 8.69 % 10 +std::string copy{str_with_len_N};/23_mean 23.2 ns 23.2 ns 10 +std::string copy{str_with_len_N};/23_median 22.9 ns 22.9 ns 10 +std::string copy{str_with_len_N};/23_stddev 1.15 ns 1.15 ns 10 +std::string copy{str_with_len_N};/23_cv 4.94 % 4.94 % 10 +std::string copy{str_with_len_N};/24_mean 22.3 ns 22.3 ns 10 +std::string copy{str_with_len_N};/24_median 22.2 ns 22.2 ns 10 +std::string copy{str_with_len_N};/24_stddev 0.521 ns 0.521 ns 10 +std::string copy{str_with_len_N};/24_cv 2.33 % 2.33 % 10 +std::string copy{str_with_len_N};/32_mean 22.2 ns 22.2 ns 10 +std::string copy{str_with_len_N};/32_median 22.0 ns 22.0 ns 10 +std::string copy{str_with_len_N};/32_stddev 0.529 ns 0.529 ns 10 +std::string copy{str_with_len_N};/32_cv 2.39 % 2.39 % 10 +std::string copy{str_with_len_N};/64_mean 22.6 ns 22.6 ns 10 +std::string copy{str_with_len_N};/64_median 22.4 ns 22.4 ns 10 +std::string copy{str_with_len_N};/64_stddev 0.917 ns 0.917 ns 10 +std::string copy{str_with_len_N};/64_cv 4.05 % 4.05 % 10 +std::string copy{str_with_len_N};/128_mean 26.2 ns 26.2 ns 10 +std::string copy{str_with_len_N};/128_median 26.1 ns 26.1 ns 10 +std::string copy{str_with_len_N};/128_stddev 0.553 ns 0.553 ns 10 +std::string copy{str_with_len_N};/128_cv 2.11 % 2.11 % 10 +std::string copy{str_with_len_N};/256_mean 27.3 ns 27.3 ns 10 +std::string copy{str_with_len_N};/256_median 27.3 ns 27.3 ns 10 +std::string copy{str_with_len_N};/256_stddev 0.472 ns 0.471 ns 10 +std::string copy{str_with_len_N};/256_cv 1.73 % 1.73 % 10 +std::string copy{str_with_len_N};/512_mean 28.3 ns 28.3 ns 10 +std::string copy{str_with_len_N};/512_median 28.1 ns 28.1 ns 10 +std::string copy{str_with_len_N};/512_stddev 0.553 ns 0.553 ns 10 +std::string copy{str_with_len_N};/512_cv 1.95 % 1.95 % 10 +std::string copy{str_with_len_N};/1024_mean 39.6 ns 39.6 ns 10 +std::string copy{str_with_len_N};/1024_median 39.6 ns 39.6 ns 10 +std::string copy{str_with_len_N};/1024_stddev 0.393 ns 0.393 ns 10 +std::string copy{str_with_len_N};/1024_cv 0.99 % 0.99 % 10 +std::string copy{str_with_len_N};/2048_mean 81.3 ns 81.3 ns 10 +std::string copy{str_with_len_N};/2048_median 79.9 ns 79.9 ns 10 +std::string copy{str_with_len_N};/2048_stddev 7.71 ns 7.71 ns 10 +std::string copy{str_with_len_N};/2048_cv 9.48 % 9.48 % 10 +std::string copy{str_with_len_N};/4096_mean 117 ns 117 ns 10 +std::string copy{str_with_len_N};/4096_median 117 ns 117 ns 10 +std::string copy{str_with_len_N};/4096_stddev 4.59 ns 4.59 ns 10 +std::string copy{str_with_len_N};/4096_cv 3.91 % 3.91 % 10 stringa copy{str_with_len_N};/15_mean 1.13 ns 1.13 ns 10 stringa copy{str_with_len_N};/15_median 1.12 ns 1.12 ns 10 -stringa copy{str_with_len_N};/15_stddev 0.046 ns 0.046 ns 10 -stringa copy{str_with_len_N};/15_cv 4.10 % 4.10 % 10 +stringa copy{str_with_len_N};/15_stddev 0.027 ns 0.027 ns 10 +stringa copy{str_with_len_N};/15_cv 2.39 % 2.39 % 10 stringa copy{str_with_len_N};/16_mean 1.12 ns 1.12 ns 10 stringa copy{str_with_len_N};/16_median 1.12 ns 1.12 ns 10 -stringa copy{str_with_len_N};/16_stddev 0.023 ns 0.023 ns 10 -stringa copy{str_with_len_N};/16_cv 2.04 % 2.04 % 10 -stringa copy{str_with_len_N};/23_mean 1.12 ns 1.12 ns 10 +stringa copy{str_with_len_N};/16_stddev 0.011 ns 0.011 ns 10 +stringa copy{str_with_len_N};/16_cv 1.01 % 1.01 % 10 +stringa copy{str_with_len_N};/23_mean 1.11 ns 1.11 ns 10 stringa copy{str_with_len_N};/23_median 1.11 ns 1.11 ns 10 -stringa copy{str_with_len_N};/23_stddev 0.012 ns 0.012 ns 10 -stringa copy{str_with_len_N};/23_cv 1.08 % 1.08 % 10 -stringa copy{str_with_len_N};/24_mean 16.3 ns 16.3 ns 10 +stringa copy{str_with_len_N};/23_stddev 0.023 ns 0.023 ns 10 +stringa copy{str_with_len_N};/23_cv 2.08 % 2.08 % 10 +stringa copy{str_with_len_N};/24_mean 16.6 ns 16.6 ns 10 stringa copy{str_with_len_N};/24_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/24_stddev 0.071 ns 0.071 ns 10 -stringa copy{str_with_len_N};/24_cv 0.43 % 0.43 % 10 -stringa copy{str_with_len_N};/32_mean 16.4 ns 16.4 ns 10 -stringa copy{str_with_len_N};/32_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/32_stddev 0.212 ns 0.212 ns 10 -stringa copy{str_with_len_N};/32_cv 1.29 % 1.29 % 10 -stringa copy{str_with_len_N};/64_mean 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/64_median 16.2 ns 16.2 ns 10 -stringa copy{str_with_len_N};/64_stddev 0.086 ns 0.086 ns 10 -stringa copy{str_with_len_N};/64_cv 0.53 % 0.53 % 10 -stringa copy{str_with_len_N};/128_mean 16.6 ns 16.6 ns 10 -stringa copy{str_with_len_N};/128_median 16.6 ns 16.6 ns 10 -stringa copy{str_with_len_N};/128_stddev 0.091 ns 0.091 ns 10 -stringa copy{str_with_len_N};/128_cv 0.55 % 0.55 % 10 -stringa copy{str_with_len_N};/256_mean 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/256_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/256_stddev 0.105 ns 0.105 ns 10 -stringa copy{str_with_len_N};/256_cv 0.64 % 0.64 % 10 -stringa copy{str_with_len_N};/512_mean 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/512_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/512_stddev 0.098 ns 0.098 ns 10 -stringa copy{str_with_len_N};/512_cv 0.60 % 0.60 % 10 -stringa copy{str_with_len_N};/1024_mean 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/1024_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/1024_stddev 0.082 ns 0.082 ns 10 -stringa copy{str_with_len_N};/1024_cv 0.50 % 0.50 % 10 -stringa copy{str_with_len_N};/2048_mean 16.4 ns 16.4 ns 10 -stringa copy{str_with_len_N};/2048_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/2048_stddev 0.092 ns 0.092 ns 10 -stringa copy{str_with_len_N};/2048_cv 0.56 % 0.56 % 10 -stringa copy{str_with_len_N};/4096_mean 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/4096_median 16.2 ns 16.2 ns 10 -stringa copy{str_with_len_N};/4096_stddev 0.291 ns 0.291 ns 10 -stringa copy{str_with_len_N};/4096_cv 1.78 % 1.78 % 10 -lstringa<16> copy{str_with_len_N};/15_mean 5.11 ns 5.11 ns 10 -lstringa<16> copy{str_with_len_N};/15_median 5.11 ns 5.11 ns 10 -lstringa<16> copy{str_with_len_N};/15_stddev 0.073 ns 0.073 ns 10 -lstringa<16> copy{str_with_len_N};/15_cv 1.43 % 1.43 % 10 -lstringa<16> copy{str_with_len_N};/16_mean 5.12 ns 5.12 ns 10 -lstringa<16> copy{str_with_len_N};/16_median 5.11 ns 5.11 ns 10 -lstringa<16> copy{str_with_len_N};/16_stddev 0.074 ns 0.074 ns 10 -lstringa<16> copy{str_with_len_N};/16_cv 1.45 % 1.45 % 10 -lstringa<16> copy{str_with_len_N};/23_mean 5.20 ns 5.20 ns 10 -lstringa<16> copy{str_with_len_N};/23_median 5.19 ns 5.19 ns 10 -lstringa<16> copy{str_with_len_N};/23_stddev 0.155 ns 0.155 ns 10 -lstringa<16> copy{str_with_len_N};/23_cv 2.98 % 2.98 % 10 -lstringa<16> copy{str_with_len_N};/24_mean 24.3 ns 24.3 ns 10 -lstringa<16> copy{str_with_len_N};/24_median 23.8 ns 23.9 ns 10 -lstringa<16> copy{str_with_len_N};/24_stddev 1.58 ns 1.58 ns 10 -lstringa<16> copy{str_with_len_N};/24_cv 6.48 % 6.48 % 10 -lstringa<16> copy{str_with_len_N};/32_mean 23.9 ns 23.9 ns 10 -lstringa<16> copy{str_with_len_N};/32_median 23.7 ns 23.7 ns 10 -lstringa<16> copy{str_with_len_N};/32_stddev 0.521 ns 0.521 ns 10 -lstringa<16> copy{str_with_len_N};/32_cv 2.18 % 2.18 % 10 -lstringa<16> copy{str_with_len_N};/64_mean 25.8 ns 25.8 ns 10 +stringa copy{str_with_len_N};/24_stddev 1.15 ns 1.15 ns 10 +stringa copy{str_with_len_N};/24_cv 6.92 % 6.92 % 10 +stringa copy{str_with_len_N};/32_mean 16.2 ns 16.2 ns 10 +stringa copy{str_with_len_N};/32_median 16.2 ns 16.2 ns 10 +stringa copy{str_with_len_N};/32_stddev 0.182 ns 0.184 ns 10 +stringa copy{str_with_len_N};/32_cv 1.12 % 1.13 % 10 +stringa copy{str_with_len_N};/64_mean 16.0 ns 16.0 ns 10 +stringa copy{str_with_len_N};/64_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/64_stddev 0.133 ns 0.133 ns 10 +stringa copy{str_with_len_N};/64_cv 0.83 % 0.83 % 10 +stringa copy{str_with_len_N};/128_mean 16.2 ns 16.2 ns 10 +stringa copy{str_with_len_N};/128_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/128_stddev 0.420 ns 0.420 ns 10 +stringa copy{str_with_len_N};/128_cv 2.60 % 2.60 % 10 +stringa copy{str_with_len_N};/256_mean 16.0 ns 16.0 ns 10 +stringa copy{str_with_len_N};/256_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/256_stddev 0.093 ns 0.093 ns 10 +stringa copy{str_with_len_N};/256_cv 0.58 % 0.58 % 10 +stringa copy{str_with_len_N};/512_mean 16.0 ns 16.0 ns 10 +stringa copy{str_with_len_N};/512_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/512_stddev 0.158 ns 0.158 ns 10 +stringa copy{str_with_len_N};/512_cv 0.98 % 0.98 % 10 +stringa copy{str_with_len_N};/1024_mean 16.4 ns 16.4 ns 10 +stringa copy{str_with_len_N};/1024_median 16.2 ns 16.2 ns 10 +stringa copy{str_with_len_N};/1024_stddev 0.353 ns 0.353 ns 10 +stringa copy{str_with_len_N};/1024_cv 2.16 % 2.16 % 10 +stringa copy{str_with_len_N};/2048_mean 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/2048_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/2048_stddev 0.089 ns 0.089 ns 10 +stringa copy{str_with_len_N};/2048_cv 0.55 % 0.55 % 10 +stringa copy{str_with_len_N};/4096_mean 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/4096_median 16.0 ns 16.0 ns 10 +stringa copy{str_with_len_N};/4096_stddev 0.117 ns 0.117 ns 10 +stringa copy{str_with_len_N};/4096_cv 0.73 % 0.73 % 10 +lstringa<16> copy{str_with_len_N};/15_mean 5.08 ns 5.08 ns 10 +lstringa<16> copy{str_with_len_N};/15_median 5.03 ns 5.03 ns 10 +lstringa<16> copy{str_with_len_N};/15_stddev 0.271 ns 0.271 ns 10 +lstringa<16> copy{str_with_len_N};/15_cv 5.33 % 5.33 % 10 +lstringa<16> copy{str_with_len_N};/16_mean 4.97 ns 4.97 ns 10 +lstringa<16> copy{str_with_len_N};/16_median 4.89 ns 4.89 ns 10 +lstringa<16> copy{str_with_len_N};/16_stddev 0.234 ns 0.234 ns 10 +lstringa<16> copy{str_with_len_N};/16_cv 4.72 % 4.72 % 10 +lstringa<16> copy{str_with_len_N};/23_mean 4.90 ns 4.90 ns 10 +lstringa<16> copy{str_with_len_N};/23_median 4.89 ns 4.89 ns 10 +lstringa<16> copy{str_with_len_N};/23_stddev 0.093 ns 0.093 ns 10 +lstringa<16> copy{str_with_len_N};/23_cv 1.89 % 1.89 % 10 +lstringa<16> copy{str_with_len_N};/24_mean 24.2 ns 24.2 ns 10 +lstringa<16> copy{str_with_len_N};/24_median 24.3 ns 24.3 ns 10 +lstringa<16> copy{str_with_len_N};/24_stddev 0.377 ns 0.377 ns 10 +lstringa<16> copy{str_with_len_N};/24_cv 1.56 % 1.56 % 10 +lstringa<16> copy{str_with_len_N};/32_mean 24.1 ns 24.1 ns 10 +lstringa<16> copy{str_with_len_N};/32_median 24.2 ns 24.2 ns 10 +lstringa<16> copy{str_with_len_N};/32_stddev 0.406 ns 0.406 ns 10 +lstringa<16> copy{str_with_len_N};/32_cv 1.69 % 1.69 % 10 +lstringa<16> copy{str_with_len_N};/64_mean 25.6 ns 25.6 ns 10 lstringa<16> copy{str_with_len_N};/64_median 25.7 ns 25.7 ns 10 -lstringa<16> copy{str_with_len_N};/64_stddev 0.580 ns 0.580 ns 10 -lstringa<16> copy{str_with_len_N};/64_cv 2.25 % 2.25 % 10 -lstringa<16> copy{str_with_len_N};/128_mean 26.3 ns 26.3 ns 10 -lstringa<16> copy{str_with_len_N};/128_median 26.1 ns 26.1 ns 10 -lstringa<16> copy{str_with_len_N};/128_stddev 0.487 ns 0.487 ns 10 -lstringa<16> copy{str_with_len_N};/128_cv 1.85 % 1.85 % 10 -lstringa<16> copy{str_with_len_N};/256_mean 27.7 ns 27.7 ns 10 -lstringa<16> copy{str_with_len_N};/256_median 27.6 ns 27.6 ns 10 -lstringa<16> copy{str_with_len_N};/256_stddev 0.382 ns 0.382 ns 10 -lstringa<16> copy{str_with_len_N};/256_cv 1.38 % 1.38 % 10 -lstringa<16> copy{str_with_len_N};/512_mean 30.6 ns 30.6 ns 10 -lstringa<16> copy{str_with_len_N};/512_median 30.6 ns 30.6 ns 10 -lstringa<16> copy{str_with_len_N};/512_stddev 0.535 ns 0.535 ns 10 -lstringa<16> copy{str_with_len_N};/512_cv 1.75 % 1.75 % 10 -lstringa<16> copy{str_with_len_N};/1024_mean 85.9 ns 85.9 ns 10 -lstringa<16> copy{str_with_len_N};/1024_median 85.5 ns 85.5 ns 10 -lstringa<16> copy{str_with_len_N};/1024_stddev 5.05 ns 5.05 ns 10 -lstringa<16> copy{str_with_len_N};/1024_cv 5.88 % 5.88 % 10 -lstringa<16> copy{str_with_len_N};/2048_mean 99.2 ns 99.2 ns 10 -lstringa<16> copy{str_with_len_N};/2048_median 95.0 ns 95.0 ns 10 -lstringa<16> copy{str_with_len_N};/2048_stddev 8.28 ns 8.28 ns 10 -lstringa<16> copy{str_with_len_N};/2048_cv 8.34 % 8.34 % 10 -lstringa<16> copy{str_with_len_N};/4096_mean 118 ns 118 ns 10 -lstringa<16> copy{str_with_len_N};/4096_median 117 ns 117 ns 10 -lstringa<16> copy{str_with_len_N};/4096_stddev 5.73 ns 5.73 ns 10 -lstringa<16> copy{str_with_len_N};/4096_cv 4.86 % 4.86 % 10 -lstringa<512> copy{str_with_len_N};/15_mean 4.96 ns 4.96 ns 10 -lstringa<512> copy{str_with_len_N};/15_median 4.97 ns 4.97 ns 10 -lstringa<512> copy{str_with_len_N};/15_stddev 0.127 ns 0.127 ns 10 -lstringa<512> copy{str_with_len_N};/15_cv 2.57 % 2.57 % 10 -lstringa<512> copy{str_with_len_N};/16_mean 4.95 ns 4.95 ns 10 -lstringa<512> copy{str_with_len_N};/16_median 4.95 ns 4.95 ns 10 -lstringa<512> copy{str_with_len_N};/16_stddev 0.037 ns 0.037 ns 10 -lstringa<512> copy{str_with_len_N};/16_cv 0.75 % 0.75 % 10 +lstringa<16> copy{str_with_len_N};/64_stddev 0.473 ns 0.473 ns 10 +lstringa<16> copy{str_with_len_N};/64_cv 1.85 % 1.85 % 10 +lstringa<16> copy{str_with_len_N};/128_mean 27.3 ns 27.3 ns 10 +lstringa<16> copy{str_with_len_N};/128_median 27.3 ns 27.3 ns 10 +lstringa<16> copy{str_with_len_N};/128_stddev 0.298 ns 0.298 ns 10 +lstringa<16> copy{str_with_len_N};/128_cv 1.09 % 1.09 % 10 +lstringa<16> copy{str_with_len_N};/256_mean 27.6 ns 27.6 ns 10 +lstringa<16> copy{str_with_len_N};/256_median 27.5 ns 27.5 ns 10 +lstringa<16> copy{str_with_len_N};/256_stddev 1.23 ns 1.23 ns 10 +lstringa<16> copy{str_with_len_N};/256_cv 4.45 % 4.45 % 10 +lstringa<16> copy{str_with_len_N};/512_mean 30.4 ns 30.4 ns 10 +lstringa<16> copy{str_with_len_N};/512_median 30.5 ns 30.5 ns 10 +lstringa<16> copy{str_with_len_N};/512_stddev 1.54 ns 1.54 ns 10 +lstringa<16> copy{str_with_len_N};/512_cv 5.07 % 5.07 % 10 +lstringa<16> copy{str_with_len_N};/1024_mean 70.0 ns 70.0 ns 10 +lstringa<16> copy{str_with_len_N};/1024_median 67.8 ns 67.8 ns 10 +lstringa<16> copy{str_with_len_N};/1024_stddev 18.1 ns 18.1 ns 10 +lstringa<16> copy{str_with_len_N};/1024_cv 25.80 % 25.80 % 10 +lstringa<16> copy{str_with_len_N};/2048_mean 74.5 ns 74.5 ns 10 +lstringa<16> copy{str_with_len_N};/2048_median 74.1 ns 74.1 ns 10 +lstringa<16> copy{str_with_len_N};/2048_stddev 11.7 ns 11.7 ns 10 +lstringa<16> copy{str_with_len_N};/2048_cv 15.66 % 15.66 % 10 +lstringa<16> copy{str_with_len_N};/4096_mean 90.9 ns 90.9 ns 10 +lstringa<16> copy{str_with_len_N};/4096_median 88.7 ns 88.7 ns 10 +lstringa<16> copy{str_with_len_N};/4096_stddev 5.55 ns 5.55 ns 10 +lstringa<16> copy{str_with_len_N};/4096_cv 6.11 % 6.11 % 10 +lstringa<512> copy{str_with_len_N};/15_mean 5.14 ns 5.14 ns 10 +lstringa<512> copy{str_with_len_N};/15_median 5.06 ns 5.06 ns 10 +lstringa<512> copy{str_with_len_N};/15_stddev 0.297 ns 0.297 ns 10 +lstringa<512> copy{str_with_len_N};/15_cv 5.77 % 5.77 % 10 +lstringa<512> copy{str_with_len_N};/16_mean 4.86 ns 4.86 ns 10 +lstringa<512> copy{str_with_len_N};/16_median 4.85 ns 4.85 ns 10 +lstringa<512> copy{str_with_len_N};/16_stddev 0.077 ns 0.077 ns 10 +lstringa<512> copy{str_with_len_N};/16_cv 1.58 % 1.58 % 10 lstringa<512> copy{str_with_len_N};/23_mean 4.91 ns 4.91 ns 10 -lstringa<512> copy{str_with_len_N};/23_median 4.87 ns 4.87 ns 10 -lstringa<512> copy{str_with_len_N};/23_stddev 0.057 ns 0.057 ns 10 -lstringa<512> copy{str_with_len_N};/23_cv 1.17 % 1.17 % 10 -lstringa<512> copy{str_with_len_N};/24_mean 4.92 ns 4.92 ns 10 -lstringa<512> copy{str_with_len_N};/24_median 4.92 ns 4.92 ns 10 -lstringa<512> copy{str_with_len_N};/24_stddev 0.070 ns 0.070 ns 10 -lstringa<512> copy{str_with_len_N};/24_cv 1.42 % 1.42 % 10 -lstringa<512> copy{str_with_len_N};/32_mean 4.61 ns 4.61 ns 10 -lstringa<512> copy{str_with_len_N};/32_median 4.60 ns 4.60 ns 10 -lstringa<512> copy{str_with_len_N};/32_stddev 0.052 ns 0.052 ns 10 -lstringa<512> copy{str_with_len_N};/32_cv 1.12 % 1.12 % 10 -lstringa<512> copy{str_with_len_N};/64_mean 6.14 ns 6.14 ns 10 -lstringa<512> copy{str_with_len_N};/64_median 6.12 ns 6.12 ns 10 -lstringa<512> copy{str_with_len_N};/64_stddev 0.137 ns 0.137 ns 10 -lstringa<512> copy{str_with_len_N};/64_cv 2.23 % 2.23 % 10 -lstringa<512> copy{str_with_len_N};/128_mean 6.50 ns 6.50 ns 10 -lstringa<512> copy{str_with_len_N};/128_median 6.48 ns 6.48 ns 10 -lstringa<512> copy{str_with_len_N};/128_stddev 0.131 ns 0.131 ns 10 -lstringa<512> copy{str_with_len_N};/128_cv 2.02 % 2.02 % 10 -lstringa<512> copy{str_with_len_N};/256_mean 8.19 ns 8.19 ns 10 -lstringa<512> copy{str_with_len_N};/256_median 8.09 ns 8.09 ns 10 -lstringa<512> copy{str_with_len_N};/256_stddev 0.353 ns 0.353 ns 10 -lstringa<512> copy{str_with_len_N};/256_cv 4.30 % 4.30 % 10 -lstringa<512> copy{str_with_len_N};/512_mean 10.4 ns 10.4 ns 10 -lstringa<512> copy{str_with_len_N};/512_median 10.5 ns 10.5 ns 10 -lstringa<512> copy{str_with_len_N};/512_stddev 0.320 ns 0.320 ns 10 -lstringa<512> copy{str_with_len_N};/512_cv 3.07 % 3.07 % 10 -lstringa<512> copy{str_with_len_N};/1024_mean 87.0 ns 87.0 ns 10 -lstringa<512> copy{str_with_len_N};/1024_median 87.7 ns 87.7 ns 10 -lstringa<512> copy{str_with_len_N};/1024_stddev 4.05 ns 4.05 ns 10 -lstringa<512> copy{str_with_len_N};/1024_cv 4.65 % 4.65 % 10 -lstringa<512> copy{str_with_len_N};/2048_mean 103 ns 103 ns 10 -lstringa<512> copy{str_with_len_N};/2048_median 104 ns 104 ns 10 -lstringa<512> copy{str_with_len_N};/2048_stddev 7.85 ns 7.85 ns 10 -lstringa<512> copy{str_with_len_N};/2048_cv 7.64 % 7.64 % 10 -lstringa<512> copy{str_with_len_N};/4096_mean 118 ns 118 ns 10 -lstringa<512> copy{str_with_len_N};/4096_median 118 ns 118 ns 10 -lstringa<512> copy{str_with_len_N};/4096_stddev 2.48 ns 2.48 ns 10 -lstringa<512> copy{str_with_len_N};/4096_cv 2.10 % 2.10 % 10 ------ Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 +lstringa<512> copy{str_with_len_N};/23_median 4.91 ns 4.91 ns 10 +lstringa<512> copy{str_with_len_N};/23_stddev 0.088 ns 0.088 ns 10 +lstringa<512> copy{str_with_len_N};/23_cv 1.79 % 1.79 % 10 +lstringa<512> copy{str_with_len_N};/24_mean 4.99 ns 4.99 ns 10 +lstringa<512> copy{str_with_len_N};/24_median 4.96 ns 4.96 ns 10 +lstringa<512> copy{str_with_len_N};/24_stddev 0.209 ns 0.209 ns 10 +lstringa<512> copy{str_with_len_N};/24_cv 4.18 % 4.18 % 10 +lstringa<512> copy{str_with_len_N};/32_mean 4.58 ns 4.58 ns 10 +lstringa<512> copy{str_with_len_N};/32_median 4.54 ns 4.54 ns 10 +lstringa<512> copy{str_with_len_N};/32_stddev 0.159 ns 0.159 ns 10 +lstringa<512> copy{str_with_len_N};/32_cv 3.48 % 3.48 % 10 +lstringa<512> copy{str_with_len_N};/64_mean 6.06 ns 6.06 ns 10 +lstringa<512> copy{str_with_len_N};/64_median 6.04 ns 6.04 ns 10 +lstringa<512> copy{str_with_len_N};/64_stddev 0.100 ns 0.100 ns 10 +lstringa<512> copy{str_with_len_N};/64_cv 1.65 % 1.65 % 10 +lstringa<512> copy{str_with_len_N};/128_mean 6.44 ns 6.45 ns 10 +lstringa<512> copy{str_with_len_N};/128_median 6.47 ns 6.47 ns 10 +lstringa<512> copy{str_with_len_N};/128_stddev 0.092 ns 0.092 ns 10 +lstringa<512> copy{str_with_len_N};/128_cv 1.42 % 1.42 % 10 +lstringa<512> copy{str_with_len_N};/256_mean 8.00 ns 8.00 ns 10 +lstringa<512> copy{str_with_len_N};/256_median 7.96 ns 7.96 ns 10 +lstringa<512> copy{str_with_len_N};/256_stddev 0.177 ns 0.177 ns 10 +lstringa<512> copy{str_with_len_N};/256_cv 2.22 % 2.22 % 10 +lstringa<512> copy{str_with_len_N};/512_mean 10.7 ns 10.7 ns 10 +lstringa<512> copy{str_with_len_N};/512_median 10.6 ns 10.6 ns 10 +lstringa<512> copy{str_with_len_N};/512_stddev 0.188 ns 0.188 ns 10 +lstringa<512> copy{str_with_len_N};/512_cv 1.76 % 1.76 % 10 +lstringa<512> copy{str_with_len_N};/1024_mean 69.8 ns 69.8 ns 10 +lstringa<512> copy{str_with_len_N};/1024_median 65.9 ns 65.9 ns 10 +lstringa<512> copy{str_with_len_N};/1024_stddev 17.9 ns 17.9 ns 10 +lstringa<512> copy{str_with_len_N};/1024_cv 25.67 % 25.67 % 10 +lstringa<512> copy{str_with_len_N};/2048_mean 73.4 ns 73.4 ns 10 +lstringa<512> copy{str_with_len_N};/2048_median 72.8 ns 72.8 ns 10 +lstringa<512> copy{str_with_len_N};/2048_stddev 11.2 ns 11.2 ns 10 +lstringa<512> copy{str_with_len_N};/2048_cv 15.26 % 15.26 % 10 +lstringa<512> copy{str_with_len_N};/4096_mean 90.8 ns 90.8 ns 10 +lstringa<512> copy{str_with_len_N};/4096_median 88.1 ns 88.1 ns 10 +lstringa<512> copy{str_with_len_N};/4096_stddev 5.69 ns 5.69 ns 10 +lstringa<512> copy{str_with_len_N};/4096_cv 6.27 % 6.27 % 10 +----- Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 27.5 ns 27.5 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 27.5 ns 27.5 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 0.506 ns 0.506 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 1.84 % 1.84 % 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 15.2 ns 15.2 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 15.2 ns 15.2 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.228 ns 0.228 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 1.50 % 1.50 % 10 -stringa s = "123456789"; int res = s.to_int_mean 13.7 ns 13.7 ns 10 -stringa s = "123456789"; int res = s.to_int_median 13.7 ns 13.7 ns 10 -stringa s = "123456789"; int res = s.to_int_stddev 0.303 ns 0.303 ns 10 -stringa s = "123456789"; int res = s.to_int_cv 2.21 % 2.21 % 10 -ssa s = "123456789"; int res = s.to_int_mean 13.2 ns 13.2 ns 10 -ssa s = "123456789"; int res = s.to_int_median 13.2 ns 13.2 ns 10 -ssa s = "123456789"; int res = s.to_int_stddev 0.187 ns 0.187 ns 10 -ssa s = "123456789"; int res = s.to_int_cv 1.41 % 1.41 % 10 -lstringa<20> s = "123456789"; int res = s.to_int_mean 12.8 ns 12.8 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_median 12.7 ns 12.7 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.256 ns 0.256 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_cv 2.00 % 2.00 % 10 ------ Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 24.2 ns 24.2 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 24.1 ns 24.1 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 0.548 ns 0.548 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 2.27 % 2.27 % 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 9.80 ns 9.80 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 27.4 ns 27.4 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 0.887 ns 0.887 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 3.23 % 3.23 % 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 15.8 ns 15.8 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 15.7 ns 15.7 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.845 ns 0.845 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 5.35 % 5.35 % 10 +stringa s = "123456789"; int res = s.to_int_mean 12.8 ns 12.8 ns 10 +stringa s = "123456789"; int res = s.to_int_median 12.7 ns 12.7 ns 10 +stringa s = "123456789"; int res = s.to_int_stddev 0.243 ns 0.243 ns 10 +stringa s = "123456789"; int res = s.to_int_cv 1.90 % 1.90 % 10 +ssa s = "123456789"; int res = s.to_int_mean 12.5 ns 12.5 ns 10 +ssa s = "123456789"; int res = s.to_int_median 12.5 ns 12.5 ns 10 +ssa s = "123456789"; int res = s.to_int_stddev 0.210 ns 0.210 ns 10 +ssa s = "123456789"; int res = s.to_int_cv 1.68 % 1.68 % 10 +lstringa<20> s = "123456789"; int res = s.to_int_mean 12.5 ns 12.5 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_median 12.5 ns 12.5 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.262 ns 0.262 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_cv 2.09 % 2.09 % 10 +----- Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 23.9 ns 23.9 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 23.7 ns 23.7 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 0.615 ns 0.615 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 2.57 % 2.57 % 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 10.0 ns 10.0 ns 10 std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 9.83 ns 9.83 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.180 ns 0.180 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 1.84 % 1.84 % 10 -stringa s = "abcDef"; int res = s.to_int_mean 11.8 ns 11.8 ns 10 -stringa s = "abcDef"; int res = s.to_int_median 11.8 ns 11.8 ns 10 -stringa s = "abcDef"; int res = s.to_int_stddev 0.179 ns 0.179 ns 10 -stringa s = "abcDef"; int res = s.to_int_cv 1.52 % 1.52 % 10 -ssa s = "abcDef"; int res = s.to_int_mean 11.6 ns 11.6 ns 10 -ssa s = "abcDef"; int res = s.to_int_median 11.6 ns 11.6 ns 10 -ssa s = "abcDef"; int res = s.to_int_stddev 0.327 ns 0.327 ns 10 -ssa s = "abcDef"; int res = s.to_int_cv 2.83 % 2.83 % 10 -lstringa<20> s = "abcDef"; int res = s.to_int_mean 11.5 ns 11.5 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_median 11.5 ns 11.5 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.224 ns 0.224 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_cv 1.95 % 1.95 % 10 ------ Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 29.1 ns 29.1 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 29.1 ns 29.1 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 0.554 ns 0.554 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 1.91 % 1.91 % 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 22.1 ns 22.1 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 22.0 ns 22.0 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 0.224 ns 0.224 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 1.01 % 1.01 % 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 15.8 ns 15.8 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 15.8 ns 15.8 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.195 ns 0.195 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 1.24 % 1.24 % 10 --- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << "abbaabbaabbaabba";_mean 1384 ns 1384 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_median 1388 ns 1388 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 36.8 ns 36.8 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_cv 2.66 % 2.66 % 10 -std::string str; ... str += "abbaabbaabbaabba";_mean 368 ns 368 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_median 372 ns 372 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_stddev 10.2 ns 10.2 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_cv 2.78 % 2.78 % 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 370 ns 370 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_median 371 ns 371 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 7.32 ns 7.32 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 1.98 % 1.98 % 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 254 ns 254 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_median 254 ns 254 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 7.63 ns 7.63 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 3.01 % 3.01 % 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 232 ns 232 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_median 230 ns 230 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 7.81 ns 7.81 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 3.37 % 3.37 % 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 140 ns 140 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 139 ns 139 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 2.35 ns 2.35 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 1.68 % 1.68 % 10 --- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 1390 ns 1390 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 1373 ns 1373 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 61.6 ns 61.6 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 4.43 % 4.43 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 1298 ns 1298 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_median 1303 ns 1303 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 25.4 ns 25.4 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 1.95 % 1.95 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 425 ns 425 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 428 ns 428 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 8.18 ns 8.18 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 1.92 % 1.92 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 367 ns 367 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 362 ns 362 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 13.0 ns 13.0 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.55 % 3.55 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 323 ns 323 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 319 ns 319 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.588 ns 0.588 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 5.87 % 5.87 % 10 +stringa s = "abcDef"; int res = s.to_int_mean 12.9 ns 12.9 ns 10 +stringa s = "abcDef"; int res = s.to_int_median 12.8 ns 12.8 ns 10 +stringa s = "abcDef"; int res = s.to_int_stddev 0.387 ns 0.387 ns 10 +stringa s = "abcDef"; int res = s.to_int_cv 3.00 % 3.00 % 10 +ssa s = "abcDef"; int res = s.to_int_mean 12.5 ns 12.5 ns 10 +ssa s = "abcDef"; int res = s.to_int_median 12.5 ns 12.5 ns 10 +ssa s = "abcDef"; int res = s.to_int_stddev 0.272 ns 0.272 ns 10 +ssa s = "abcDef"; int res = s.to_int_cv 2.17 % 2.17 % 10 +lstringa<20> s = "abcDef"; int res = s.to_int_mean 12.7 ns 12.7 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_median 12.4 ns 12.4 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.542 ns 0.542 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_cv 4.28 % 4.28 % 10 +----- Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 28.9 ns 28.9 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 29.0 ns 29.0 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 0.673 ns 0.673 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 2.32 % 2.32 % 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 18.8 ns 18.8 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 18.8 ns 18.8 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 0.285 ns 0.285 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 1.52 % 1.52 % 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 16.1 ns 16.1 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 16.1 ns 16.1 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.269 ns 0.269 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 1.67 % 1.67 % 10 +----- Convert to double '1234.567e10' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_mean 65.0 ns 65.0 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_median 65.2 ns 65.2 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_stddev 1.50 ns 1.50 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_cv 2.30 % 2.30 % 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_mean 24.2 ns 24.2 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_median 24.2 ns 24.2 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_stddev 0.504 ns 0.504 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_cv 2.08 % 2.08 % 10 +ssa s = "1234.567e10"; double res = *s.to_double()_mean 26.1 ns 26.1 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_median 26.0 ns 26.0 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_stddev 0.459 ns 0.459 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_cv 1.76 % 1.76 % 10 +-- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << "abbaabbaabbaabba";_mean 1403 ns 1403 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_median 1392 ns 1392 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 56.2 ns 56.2 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_cv 4.01 % 4.01 % 10 +std::string str; ... str += "abbaabbaabbaabba";_mean 359 ns 359 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_median 363 ns 363 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_stddev 22.7 ns 22.7 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_cv 6.33 % 6.33 % 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 337 ns 337 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_median 332 ns 332 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 15.8 ns 15.8 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 4.69 % 4.69 % 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 242 ns 242 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_median 245 ns 245 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 10.9 ns 10.9 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 4.51 % 4.51 % 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 227 ns 227 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_median 226 ns 226 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 10.2 ns 10.2 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 4.48 % 4.48 % 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 138 ns 138 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 138 ns 138 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 2.87 ns 2.87 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 2.07 % 2.07 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 1403 ns 1403 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 1376 ns 1376 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 95.9 ns 95.9 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 6.84 % 6.84 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 1296 ns 1296 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_median 1297 ns 1297 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 14.4 ns 14.4 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 1.11 % 1.11 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 431 ns 431 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 435 ns 435 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 22.8 ns 22.8 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 5.28 % 5.28 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 326 ns 326 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 330 ns 330 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 18.3 ns 18.3 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 5.61 % 5.61 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 312 ns 312 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 316 ns 316 ns 10 lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 11.6 ns 11.6 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.58 % 3.58 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 241 ns 241 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 241 ns 241 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 4.24 ns 4.24 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 1.76 % 1.76 % 10 --- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 73908 ns 73908 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 73853 ns 73853 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 761 ns 761 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 1.03 % 1.03 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 77722 ns 77722 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 77751 ns 77751 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 1085 ns 1085 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.40 % 1.40 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 21112 ns 21112 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 20934 ns 20934 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 636 ns 636 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.01 % 3.01 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 16124 ns 16124 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 16155 ns 16155 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 368 ns 368 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.28 % 2.28 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 16129 ns 16129 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 16093 ns 16093 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 441 ns 441 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.74 % 2.74 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 16145 ns 16145 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 16117 ns 16118 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 500 ns 500 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.10 % 3.10 % 10 --- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var1 << str_var2;_mean 1393 ns 1393 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_median 1394 ns 1394 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_stddev 17.5 ns 17.5 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_cv 1.25 % 1.25 % 10 -std::string str; ... str += str_var1 + str_var2;_mean 1412 ns 1412 ns 10 -std::string str; ... str += str_var1 + str_var2;_median 1403 ns 1403 ns 10 -std::string str; ... str += str_var1 + str_var2;_stddev 31.2 ns 31.2 ns 10 -std::string str; ... str += str_var1 + str_var2;_cv 2.21 % 2.21 % 10 -lstringa<16> str; ... str += str_var1 + str_var2;_mean 513 ns 513 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_median 513 ns 513 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_stddev 11.8 ns 11.8 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_cv 2.30 % 2.30 % 10 -lstringa<128> str; ... str += str_var1 + str_var2;_mean 443 ns 443 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_median 443 ns 443 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_stddev 9.72 ns 9.72 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_cv 2.20 % 2.20 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.70 % 3.70 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 253 ns 253 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 243 ns 243 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 20.5 ns 20.5 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 8.10 % 8.10 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 125727 ns 125726 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 125997 ns 125994 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 2545 ns 2545 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 2.02 % 2.02 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 77160 ns 77160 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 76892 ns 76892 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 1509 ns 1509 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.96 % 1.96 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 52479 ns 52479 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 52594 ns 52594 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 2170 ns 2170 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 4.14 % 4.14 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 28389 ns 28389 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 29270 ns 29270 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 3975 ns 3975 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 14.00 % 14.00 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 18137 ns 18137 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 15931 ns 15931 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 4628 ns 4628 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 25.52 % 25.52 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 15503 ns 15503 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 15576 ns 15576 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 298 ns 298 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.92 % 1.92 % 10 +-- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var1 << str_var2;_mean 1369 ns 1369 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_median 1355 ns 1355 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_stddev 50.3 ns 50.3 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_cv 3.68 % 3.68 % 10 +std::string str; ... str += str_var1 + str_var2;_mean 1396 ns 1396 ns 10 +std::string str; ... str += str_var1 + str_var2;_median 1376 ns 1376 ns 10 +std::string str; ... str += str_var1 + str_var2;_stddev 67.2 ns 67.2 ns 10 +std::string str; ... str += str_var1 + str_var2;_cv 4.81 % 4.81 % 10 +lstringa<16> str; ... str += str_var1 + str_var2;_mean 523 ns 523 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_median 492 ns 492 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_stddev 62.1 ns 62.1 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_cv 11.86 % 11.86 % 10 +lstringa<128> str; ... str += str_var1 + str_var2;_mean 419 ns 419 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_median 418 ns 418 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_stddev 11.5 ns 11.5 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_cv 2.74 % 2.74 % 10 lstringa<512> str; ... str += str_var1 + str_var2;_mean 395 ns 395 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_median 395 ns 395 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_stddev 10.6 ns 10.6 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_cv 2.67 % 2.67 % 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_mean 312 ns 312 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_median 312 ns 312 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 4.76 ns 4.76 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_cv 1.52 % 1.52 % 10 --- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; str << "test = " << k << " times";_mean 3133 ns 3133 ns 10 -std::stringstream str; str << "test = " << k << " times";_median 3110 ns 3110 ns 10 -std::stringstream str; str << "test = " << k << " times";_stddev 97.9 ns 97.9 ns 10 -std::stringstream str; str << "test = " << k << " times";_cv 3.12 % 3.12 % 10 -std::string str = "test = " + std::to_string(k) + " times";_mean 486 ns 486 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_median 486 ns 486 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_stddev 8.54 ns 8.55 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_cv 1.76 % 1.76 % 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 1424 ns 1424 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 1411 ns 1411 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 30.7 ns 30.7 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 2.16 % 2.16 % 10 -std::string str = std::format("test = {} times", k);_mean 1184 ns 1184 ns 10 -std::string str = std::format("test = {} times", k);_median 1176 ns 1176 ns 10 -std::string str = std::format("test = {} times", k);_stddev 26.6 ns 26.6 ns 10 -std::string str = std::format("test = {} times", k);_cv 2.25 % 2.25 % 10 -lstringa<8> str; str.format("test = {} times", k);_mean 1412 ns 1412 ns 10 -lstringa<8> str; str.format("test = {} times", k);_median 1396 ns 1396 ns 10 -lstringa<8> str; str.format("test = {} times", k);_stddev 46.3 ns 46.3 ns 10 -lstringa<8> str; str.format("test = {} times", k);_cv 3.28 % 3.28 % 10 -lstringa<32> str; str.format("test = {} times", k);_mean 997 ns 997 ns 10 -lstringa<32> str; str.format("test = {} times", k);_median 996 ns 996 ns 10 -lstringa<32> str; str.format("test = {} times", k);_stddev 19.7 ns 19.7 ns 10 -lstringa<32> str; str.format("test = {} times", k);_cv 1.98 % 1.98 % 10 -lstringa<8> str = "test = " + k + " times";_mean 323 ns 323 ns 10 -lstringa<8> str = "test = " + k + " times";_median 322 ns 322 ns 10 -lstringa<8> str = "test = " + k + " times";_stddev 12.6 ns 12.6 ns 10 -lstringa<8> str = "test = " + k + " times";_cv 3.92 % 3.92 % 10 +lstringa<512> str; ... str += str_var1 + str_var2;_median 379 ns 379 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_stddev 32.8 ns 32.8 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_cv 8.30 % 8.30 % 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_mean 311 ns 311 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_median 307 ns 307 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 20.7 ns 20.7 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_cv 6.68 % 6.68 % 10 +-- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; str << "test = " << k << " times";_mean 3149 ns 3149 ns 10 +std::stringstream str; str << "test = " << k << " times";_median 3141 ns 3141 ns 10 +std::stringstream str; str << "test = " << k << " times";_stddev 163 ns 163 ns 10 +std::stringstream str; str << "test = " << k << " times";_cv 5.18 % 5.18 % 10 +std::string str = "test = " + std::to_string(k) + " times";_mean 482 ns 482 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_median 479 ns 479 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_stddev 10.3 ns 10.3 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_cv 2.14 % 2.14 % 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 1416 ns 1416 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 1403 ns 1403 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 56.8 ns 56.8 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 4.01 % 4.01 % 10 +std::string str = std::format("test = {} times", k);_mean 1134 ns 1134 ns 10 +std::string str = std::format("test = {} times", k);_median 1131 ns 1131 ns 10 +std::string str = std::format("test = {} times", k);_stddev 22.6 ns 22.6 ns 10 +std::string str = std::format("test = {} times", k);_cv 1.99 % 1.99 % 10 +lstringa<8> str; str.format("test = {} times", k);_mean 1390 ns 1390 ns 10 +lstringa<8> str; str.format("test = {} times", k);_median 1382 ns 1382 ns 10 +lstringa<8> str; str.format("test = {} times", k);_stddev 31.5 ns 31.5 ns 10 +lstringa<8> str; str.format("test = {} times", k);_cv 2.27 % 2.27 % 10 +lstringa<32> str; str.format("test = {} times", k);_mean 963 ns 963 ns 10 +lstringa<32> str; str.format("test = {} times", k);_median 968 ns 968 ns 10 +lstringa<32> str; str.format("test = {} times", k);_stddev 25.6 ns 25.6 ns 10 +lstringa<32> str; str.format("test = {} times", k);_cv 2.66 % 2.66 % 10 +lstringa<8> str = "test = " + k + " times";_mean 290 ns 290 ns 10 +lstringa<8> str = "test = " + k + " times";_median 288 ns 288 ns 10 +lstringa<8> str = "test = " + k + " times";_stddev 7.48 ns 7.49 ns 10 +lstringa<8> str = "test = " + k + " times";_cv 2.58 % 2.58 % 10 lstringa<32> str = "test = " + k + " times";_mean 157 ns 157 ns 10 -lstringa<32> str = "test = " + k + " times";_median 158 ns 158 ns 10 -lstringa<32> str = "test = " + k + " times";_stddev 2.50 ns 2.50 ns 10 -lstringa<32> str = "test = " + k + " times";_cv 1.59 % 1.59 % 10 -stringa str = "test = " + k + " times";_mean 152 ns 152 ns 10 -stringa str = "test = " + k + " times";_median 151 ns 151 ns 10 -stringa str = "test = " + k + " times";_stddev 3.32 ns 3.32 ns 10 -stringa str = "test = " + k + " times";_cv 2.18 % 2.18 % 10 --- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find + substr + std::strtol_mean 268 ns 268 ns 10 -std::string::find + substr + std::strtol_median 266 ns 266 ns 10 -std::string::find + substr + std::strtol_stddev 8.11 ns 8.11 ns 10 -std::string::find + substr + std::strtol_cv 3.03 % 3.03 % 10 -ssa::splitter + ssa::as_int_mean 161 ns 161 ns 10 -ssa::splitter + ssa::as_int_median 161 ns 161 ns 10 -ssa::splitter + ssa::as_int_stddev 2.57 ns 2.57 ns 10 -ssa::splitter + ssa::as_int_cv 1.59 % 1.59 % 10 -ssa::splitf + functor_mean 180 ns 180 ns 10 -ssa::splitf + functor_median 180 ns 180 ns 10 -ssa::splitf + functor_stddev 3.96 ns 3.96 ns 10 -ssa::splitf + functor_cv 2.20 % 2.20 % 10 --- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Naive (and wrong) replace symbols with std::string find + replace_mean 859 ns 859 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_median 863 ns 863 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_stddev 15.1 ns 15.1 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_cv 1.76 % 1.76 % 10 -replace symbols with std::string find_first_of + replace_mean 2541 ns 2541 ns 10 -replace symbols with std::string find_first_of + replace_median 2536 ns 2536 ns 10 -replace symbols with std::string find_first_of + replace_stddev 46.5 ns 46.5 ns 10 -replace symbols with std::string find_first_of + replace_cv 1.83 % 1.83 % 10 -replace symbols with std::string_view find_first_of + copy_mean 2719 ns 2719 ns 10 -replace symbols with std::string_view find_first_of + copy_median 2686 ns 2686 ns 10 -replace symbols with std::string_view find_first_of + copy_stddev 132 ns 132 ns 10 -replace symbols with std::string_view find_first_of + copy_cv 4.86 % 4.86 % 10 -replace runtime symbols with string expressions and without remembering all search results_mean 1253 ns 1253 ns 10 -replace runtime symbols with string expressions and without remembering all search results_median 1248 ns 1248 ns 10 -replace runtime symbols with string expressions and without remembering all search results_stddev 19.8 ns 19.8 ns 10 -replace runtime symbols with string expressions and without remembering all search results_cv 1.58 % 1.58 % 10 -replace runtime symbols with simstr and memorization of all search results_mean 1026 ns 1026 ns 10 -replace runtime symbols with simstr and memorization of all search results_median 1007 ns 1007 ns 10 -replace runtime symbols with simstr and memorization of all search results_stddev 52.6 ns 52.6 ns 10 -replace runtime symbols with simstr and memorization of all search results_cv 5.13 % 5.13 % 10 -replace const symbols with string expressions and without remembering all search results_mean 1150 ns 1150 ns 10 -replace const symbols with string expressions and without remembering all search results_median 1150 ns 1150 ns 10 -replace const symbols with string expressions and without remembering all search results_stddev 13.8 ns 13.8 ns 10 -replace const symbols with string expressions and without remembering all search results_cv 1.20 % 1.20 % 10 -replace const symbols with string expressions and memorization of all search results_mean 897 ns 897 ns 10 -replace const symbols with string expressions and memorization of all search results_median 892 ns 892 ns 10 -replace const symbols with string expressions and memorization of all search results_stddev 16.3 ns 16.3 ns 10 -replace const symbols with string expressions and memorization of all search results_cv 1.82 % 1.82 % 10 --- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Short Naive (and wrong) replace symbols with std::string find + replace_mean 165 ns 165 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_median 165 ns 165 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_stddev 2.38 ns 2.38 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_cv 1.44 % 1.44 % 10 -Short replace symbols with std::string find_first_of + replace_mean 312 ns 312 ns 10 -Short replace symbols with std::string find_first_of + replace_median 312 ns 312 ns 10 -Short replace symbols with std::string find_first_of + replace_stddev 4.94 ns 4.94 ns 10 -Short replace symbols with std::string find_first_of + replace_cv 1.58 % 1.58 % 10 -Short replace symbols with std::string_view find_first_of + copy_mean 338 ns 338 ns 10 -Short replace symbols with std::string_view find_first_of + copy_median 339 ns 339 ns 10 -Short replace symbols with std::string_view find_first_of + copy_stddev 4.87 ns 4.87 ns 10 -Short replace symbols with std::string_view find_first_of + copy_cv 1.44 % 1.44 % 10 -Short replace runtime symbols with string expressions and without remembering all search results_mean 165 ns 165 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_median 166 ns 166 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_stddev 2.88 ns 2.88 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_cv 1.74 % 1.74 % 10 -Short replace runtime symbols with simstr and memorization of all search results_mean 188 ns 188 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_median 185 ns 185 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_stddev 5.08 ns 5.08 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_cv 2.71 % 2.71 % 10 -Short replace const symbols with string expressions and without remembering all search results_mean 146 ns 146 ns 10 -Short replace const symbols with string expressions and without remembering all search results_median 145 ns 145 ns 10 -Short replace const symbols with string expressions and without remembering all search results_stddev 4.26 ns 4.26 ns 10 -Short replace const symbols with string expressions and without remembering all search results_cv 2.93 % 2.93 % 10 -Short replace const symbols with string expressions and memorization of all search results_mean 150 ns 150 ns 10 -Short replace const symbols with string expressions and memorization of all search results_median 148 ns 148 ns 10 -Short replace const symbols with string expressions and memorization of all search results_stddev 6.96 ns 6.96 ns 10 -Short replace const symbols with string expressions and memorization of all search results_cv 4.65 % 4.65 % 10 ------ Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to ---- in std::string|64_mean 161 ns 161 ns 10 -replace bb to ---- in std::string|64_median 162 ns 162 ns 10 -replace bb to ---- in std::string|64_stddev 3.66 ns 3.66 ns 10 -replace bb to ---- in std::string|64_cv 2.27 % 2.27 % 10 -replace bb to ---- in std::string|256_mean 541 ns 541 ns 10 -replace bb to ---- in std::string|256_median 543 ns 543 ns 10 -replace bb to ---- in std::string|256_stddev 7.23 ns 7.23 ns 10 -replace bb to ---- in std::string|256_cv 1.33 % 1.33 % 10 -replace bb to ---- in std::string|512_mean 1075 ns 1075 ns 10 -replace bb to ---- in std::string|512_median 1065 ns 1065 ns 10 -replace bb to ---- in std::string|512_stddev 29.7 ns 29.7 ns 10 -replace bb to ---- in std::string|512_cv 2.77 % 2.77 % 10 -replace bb to ---- in std::string|1024_mean 2344 ns 2344 ns 10 -replace bb to ---- in std::string|1024_median 2329 ns 2329 ns 10 -replace bb to ---- in std::string|1024_stddev 107 ns 107 ns 10 -replace bb to ---- in std::string|1024_cv 4.57 % 4.57 % 10 -replace bb to ---- in std::string|2048_mean 6366 ns 6366 ns 10 -replace bb to ---- in std::string|2048_median 6592 ns 6592 ns 10 -replace bb to ---- in std::string|2048_stddev 444 ns 444 ns 10 -replace bb to ---- in std::string|2048_cv 6.97 % 6.97 % 10 +lstringa<32> str = "test = " + k + " times";_median 156 ns 156 ns 10 +lstringa<32> str = "test = " + k + " times";_stddev 10.2 ns 10.2 ns 10 +lstringa<32> str = "test = " + k + " times";_cv 6.49 % 6.49 % 10 +stringa str = "test = " + k + " times";_mean 149 ns 149 ns 10 +stringa str = "test = " + k + " times";_median 149 ns 149 ns 10 +stringa str = "test = " + k + " times";_stddev 2.52 ns 2.52 ns 10 +stringa str = "test = " + k + " times";_cv 1.69 % 1.69 % 10 +-- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find + substr + std::strtol_mean 276 ns 276 ns 10 +std::string::find + substr + std::strtol_median 279 ns 279 ns 10 +std::string::find + substr + std::strtol_stddev 9.35 ns 9.35 ns 10 +std::string::find + substr + std::strtol_cv 3.39 % 3.39 % 10 +ssa::splitter + ssa::as_int_mean 154 ns 154 ns 10 +ssa::splitter + ssa::as_int_median 153 ns 153 ns 10 +ssa::splitter + ssa::as_int_stddev 4.66 ns 4.66 ns 10 +ssa::splitter + ssa::as_int_cv 3.03 % 3.03 % 10 +ssa::splitf + functor_mean 214 ns 214 ns 10 +ssa::splitf + functor_median 215 ns 215 ns 10 +ssa::splitf + functor_stddev 3.91 ns 3.91 ns 10 +ssa::splitf + functor_cv 1.83 % 1.83 % 10 +-- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Naive (and wrong) replace symbols with std::string find + replace_mean 852 ns 852 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_median 849 ns 849 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_stddev 13.8 ns 13.8 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_cv 1.62 % 1.62 % 10 +replace symbols with std::string find_first_of + replace_mean 2510 ns 2510 ns 10 +replace symbols with std::string find_first_of + replace_median 2491 ns 2491 ns 10 +replace symbols with std::string find_first_of + replace_stddev 65.3 ns 65.3 ns 10 +replace symbols with std::string find_first_of + replace_cv 2.60 % 2.60 % 10 +replace symbols with std::string_view find_first_of + copy_mean 1110 ns 1110 ns 10 +replace symbols with std::string_view find_first_of + copy_median 1106 ns 1106 ns 10 +replace symbols with std::string_view find_first_of + copy_stddev 36.3 ns 36.3 ns 10 +replace symbols with std::string_view find_first_of + copy_cv 3.27 % 3.27 % 10 +replace runtime symbols with string expressions and without remembering all search results_mean 1235 ns 1235 ns 10 +replace runtime symbols with string expressions and without remembering all search results_median 1213 ns 1213 ns 10 +replace runtime symbols with string expressions and without remembering all search results_stddev 58.0 ns 58.0 ns 10 +replace runtime symbols with string expressions and without remembering all search results_cv 4.69 % 4.69 % 10 +replace runtime symbols with simstr and memorization of all search results_mean 1069 ns 1069 ns 10 +replace runtime symbols with simstr and memorization of all search results_median 1025 ns 1025 ns 10 +replace runtime symbols with simstr and memorization of all search results_stddev 100 ns 100 ns 10 +replace runtime symbols with simstr and memorization of all search results_cv 9.38 % 9.38 % 10 +replace const symbols with string expressions and without remembering all search results_mean 1084 ns 1084 ns 10 +replace const symbols with string expressions and without remembering all search results_median 1053 ns 1053 ns 10 +replace const symbols with string expressions and without remembering all search results_stddev 91.1 ns 91.1 ns 10 +replace const symbols with string expressions and without remembering all search results_cv 8.40 % 8.40 % 10 +replace const symbols with string expressions and memorization of all search results_mean 862 ns 862 ns 10 +replace const symbols with string expressions and memorization of all search results_median 865 ns 865 ns 10 +replace const symbols with string expressions and memorization of all search results_stddev 22.9 ns 22.9 ns 10 +replace const symbols with string expressions and memorization of all search results_cv 2.66 % 2.66 % 10 +-- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Short Naive (and wrong) replace symbols with std::string find + replace_mean 170 ns 170 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_median 169 ns 169 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_stddev 2.55 ns 2.55 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_cv 1.50 % 1.50 % 10 +Short replace symbols with std::string find_first_of + replace_mean 310 ns 310 ns 10 +Short replace symbols with std::string find_first_of + replace_median 309 ns 309 ns 10 +Short replace symbols with std::string find_first_of + replace_stddev 8.39 ns 8.39 ns 10 +Short replace symbols with std::string find_first_of + replace_cv 2.71 % 2.71 % 10 +Short replace symbols with std::string_view find_first_of + copy_mean 165 ns 165 ns 10 +Short replace symbols with std::string_view find_first_of + copy_median 164 ns 164 ns 10 +Short replace symbols with std::string_view find_first_of + copy_stddev 3.77 ns 3.77 ns 10 +Short replace symbols with std::string_view find_first_of + copy_cv 2.29 % 2.29 % 10 +Short replace runtime symbols with string expressions and without remembering all search results_mean 167 ns 167 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_median 167 ns 167 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_stddev 2.92 ns 2.92 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_cv 1.75 % 1.75 % 10 +Short replace runtime symbols with simstr and memorization of all search results_mean 176 ns 176 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_median 175 ns 175 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_stddev 6.46 ns 6.46 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_cv 3.66 % 3.66 % 10 +Short replace const symbols with string expressions and without remembering all search results_mean 142 ns 142 ns 10 +Short replace const symbols with string expressions and without remembering all search results_median 138 ns 138 ns 10 +Short replace const symbols with string expressions and without remembering all search results_stddev 9.85 ns 9.85 ns 10 +Short replace const symbols with string expressions and without remembering all search results_cv 6.94 % 6.94 % 10 +Short replace const symbols with string expressions and memorization of all search results_mean 157 ns 157 ns 10 +Short replace const symbols with string expressions and memorization of all search results_median 154 ns 154 ns 10 +Short replace const symbols with string expressions and memorization of all search results_stddev 9.03 ns 9.03 ns 10 +Short replace const symbols with string expressions and memorization of all search results_cv 5.77 % 5.77 % 10 +----- Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to ---- in std::string|64_mean 164 ns 164 ns 10 +replace bb to ---- in std::string|64_median 163 ns 163 ns 10 +replace bb to ---- in std::string|64_stddev 5.14 ns 5.14 ns 10 +replace bb to ---- in std::string|64_cv 3.14 % 3.14 % 10 +replace bb to ---- in std::string|256_mean 531 ns 531 ns 10 +replace bb to ---- in std::string|256_median 523 ns 523 ns 10 +replace bb to ---- in std::string|256_stddev 22.7 ns 22.7 ns 10 +replace bb to ---- in std::string|256_cv 4.28 % 4.28 % 10 +replace bb to ---- in std::string|512_mean 1217 ns 1217 ns 10 +replace bb to ---- in std::string|512_median 1212 ns 1212 ns 10 +replace bb to ---- in std::string|512_stddev 24.5 ns 24.5 ns 10 +replace bb to ---- in std::string|512_cv 2.01 % 2.01 % 10 +replace bb to ---- in std::string|1024_mean 2374 ns 2374 ns 10 +replace bb to ---- in std::string|1024_median 2360 ns 2360 ns 10 +replace bb to ---- in std::string|1024_stddev 144 ns 144 ns 10 +replace bb to ---- in std::string|1024_cv 6.06 % 6.06 % 10 +replace bb to ---- in std::string|2048_mean 5735 ns 5735 ns 10 +replace bb to ---- in std::string|2048_median 5662 ns 5662 ns 10 +replace bb to ---- in std::string|2048_stddev 211 ns 211 ns 10 +replace bb to ---- in std::string|2048_cv 3.67 % 3.67 % 10 replace bb to ---- in lstringa<8>|64_mean 145 ns 145 ns 10 -replace bb to ---- in lstringa<8>|64_median 144 ns 144 ns 10 -replace bb to ---- in lstringa<8>|64_stddev 3.85 ns 3.85 ns 10 -replace bb to ---- in lstringa<8>|64_cv 2.66 % 2.66 % 10 -replace bb to ---- in lstringa<8>|256_mean 438 ns 438 ns 10 -replace bb to ---- in lstringa<8>|256_median 438 ns 438 ns 10 -replace bb to ---- in lstringa<8>|256_stddev 7.46 ns 7.46 ns 10 -replace bb to ---- in lstringa<8>|256_cv 1.70 % 1.70 % 10 -replace bb to ---- in lstringa<8>|512_mean 824 ns 824 ns 10 -replace bb to ---- in lstringa<8>|512_median 820 ns 820 ns 10 -replace bb to ---- in lstringa<8>|512_stddev 29.8 ns 29.8 ns 10 -replace bb to ---- in lstringa<8>|512_cv 3.62 % 3.62 % 10 -replace bb to ---- in lstringa<8>|1024_mean 1662 ns 1662 ns 10 -replace bb to ---- in lstringa<8>|1024_median 1661 ns 1661 ns 10 -replace bb to ---- in lstringa<8>|1024_stddev 28.8 ns 28.8 ns 10 -replace bb to ---- in lstringa<8>|1024_cv 1.73 % 1.73 % 10 -replace bb to ---- in lstringa<8>|2048_mean 3108 ns 3108 ns 10 -replace bb to ---- in lstringa<8>|2048_median 3101 ns 3101 ns 10 -replace bb to ---- in lstringa<8>|2048_stddev 44.7 ns 44.7 ns 10 -replace bb to ---- in lstringa<8>|2048_cv 1.44 % 1.44 % 10 -replace bb to ---- by init stringa|64_mean 116 ns 116 ns 10 +replace bb to ---- in lstringa<8>|64_median 145 ns 145 ns 10 +replace bb to ---- in lstringa<8>|64_stddev 3.55 ns 3.55 ns 10 +replace bb to ---- in lstringa<8>|64_cv 2.44 % 2.44 % 10 +replace bb to ---- in lstringa<8>|256_mean 435 ns 435 ns 10 +replace bb to ---- in lstringa<8>|256_median 435 ns 435 ns 10 +replace bb to ---- in lstringa<8>|256_stddev 8.39 ns 8.39 ns 10 +replace bb to ---- in lstringa<8>|256_cv 1.93 % 1.93 % 10 +replace bb to ---- in lstringa<8>|512_mean 825 ns 825 ns 10 +replace bb to ---- in lstringa<8>|512_median 800 ns 800 ns 10 +replace bb to ---- in lstringa<8>|512_stddev 67.4 ns 67.4 ns 10 +replace bb to ---- in lstringa<8>|512_cv 8.17 % 8.17 % 10 +replace bb to ---- in lstringa<8>|1024_mean 1713 ns 1713 ns 10 +replace bb to ---- in lstringa<8>|1024_median 1679 ns 1679 ns 10 +replace bb to ---- in lstringa<8>|1024_stddev 76.5 ns 76.5 ns 10 +replace bb to ---- in lstringa<8>|1024_cv 4.47 % 4.47 % 10 +replace bb to ---- in lstringa<8>|2048_mean 3055 ns 3055 ns 10 +replace bb to ---- in lstringa<8>|2048_median 3001 ns 3001 ns 10 +replace bb to ---- in lstringa<8>|2048_stddev 214 ns 214 ns 10 +replace bb to ---- in lstringa<8>|2048_cv 7.00 % 7.00 % 10 +replace bb to ---- by init stringa|64_mean 117 ns 117 ns 10 replace bb to ---- by init stringa|64_median 116 ns 116 ns 10 -replace bb to ---- by init stringa|64_stddev 4.03 ns 4.03 ns 10 -replace bb to ---- by init stringa|64_cv 3.46 % 3.46 % 10 -replace bb to ---- by init stringa|256_mean 389 ns 389 ns 10 -replace bb to ---- by init stringa|256_median 387 ns 387 ns 10 -replace bb to ---- by init stringa|256_stddev 8.05 ns 8.05 ns 10 -replace bb to ---- by init stringa|256_cv 2.07 % 2.07 % 10 -replace bb to ---- by init stringa|512_mean 797 ns 797 ns 10 -replace bb to ---- by init stringa|512_median 794 ns 794 ns 10 -replace bb to ---- by init stringa|512_stddev 18.1 ns 18.1 ns 10 -replace bb to ---- by init stringa|512_cv 2.27 % 2.27 % 10 -replace bb to ---- by init stringa|1024_mean 1629 ns 1629 ns 10 -replace bb to ---- by init stringa|1024_median 1606 ns 1606 ns 10 -replace bb to ---- by init stringa|1024_stddev 68.9 ns 68.9 ns 10 -replace bb to ---- by init stringa|1024_cv 4.23 % 4.23 % 10 -replace bb to ---- by init stringa|2048_mean 3125 ns 3125 ns 10 -replace bb to ---- by init stringa|2048_median 3104 ns 3104 ns 10 -replace bb to ---- by init stringa|2048_stddev 76.1 ns 76.1 ns 10 -replace bb to ---- by init stringa|2048_cv 2.43 % 2.43 % 10 ------ Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to -- in std::string|64_mean 129 ns 129 ns 10 -replace bb to -- in std::string|64_median 128 ns 128 ns 10 -replace bb to -- in std::string|64_stddev 2.39 ns 2.39 ns 10 -replace bb to -- in std::string|64_cv 1.85 % 1.85 % 10 -replace bb to -- in std::string|256_mean 404 ns 404 ns 10 -replace bb to -- in std::string|256_median 404 ns 404 ns 10 -replace bb to -- in std::string|256_stddev 8.73 ns 8.73 ns 10 -replace bb to -- in std::string|256_cv 2.16 % 2.16 % 10 -replace bb to -- in std::string|512_mean 815 ns 815 ns 10 -replace bb to -- in std::string|512_median 818 ns 818 ns 10 -replace bb to -- in std::string|512_stddev 13.4 ns 13.4 ns 10 -replace bb to -- in std::string|512_cv 1.65 % 1.65 % 10 -replace bb to -- in std::string|1024_mean 1489 ns 1489 ns 10 -replace bb to -- in std::string|1024_median 1486 ns 1486 ns 10 -replace bb to -- in std::string|1024_stddev 31.5 ns 31.5 ns 10 -replace bb to -- in std::string|1024_cv 2.12 % 2.12 % 10 -replace bb to -- in std::string|2048_mean 3100 ns 3100 ns 10 -replace bb to -- in std::string|2048_median 3097 ns 3097 ns 10 -replace bb to -- in std::string|2048_stddev 70.1 ns 70.1 ns 10 -replace bb to -- in std::string|2048_cv 2.26 % 2.26 % 10 +replace bb to ---- by init stringa|64_stddev 1.72 ns 1.72 ns 10 +replace bb to ---- by init stringa|64_cv 1.47 % 1.47 % 10 +replace bb to ---- by init stringa|256_mean 398 ns 398 ns 10 +replace bb to ---- by init stringa|256_median 398 ns 398 ns 10 +replace bb to ---- by init stringa|256_stddev 7.04 ns 7.04 ns 10 +replace bb to ---- by init stringa|256_cv 1.77 % 1.77 % 10 +replace bb to ---- by init stringa|512_mean 803 ns 803 ns 10 +replace bb to ---- by init stringa|512_median 802 ns 802 ns 10 +replace bb to ---- by init stringa|512_stddev 9.50 ns 9.50 ns 10 +replace bb to ---- by init stringa|512_cv 1.18 % 1.18 % 10 +replace bb to ---- by init stringa|1024_mean 1624 ns 1624 ns 10 +replace bb to ---- by init stringa|1024_median 1636 ns 1636 ns 10 +replace bb to ---- by init stringa|1024_stddev 31.9 ns 31.9 ns 10 +replace bb to ---- by init stringa|1024_cv 1.96 % 1.96 % 10 +replace bb to ---- by init stringa|2048_mean 3156 ns 3156 ns 10 +replace bb to ---- by init stringa|2048_median 3138 ns 3138 ns 10 +replace bb to ---- by init stringa|2048_stddev 89.9 ns 89.9 ns 10 +replace bb to ---- by init stringa|2048_cv 2.85 % 2.85 % 10 +----- Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to -- in std::string|64_mean 119 ns 119 ns 10 +replace bb to -- in std::string|64_median 118 ns 118 ns 10 +replace bb to -- in std::string|64_stddev 2.56 ns 2.56 ns 10 +replace bb to -- in std::string|64_cv 2.16 % 2.16 % 10 +replace bb to -- in std::string|256_mean 415 ns 415 ns 10 +replace bb to -- in std::string|256_median 413 ns 413 ns 10 +replace bb to -- in std::string|256_stddev 9.74 ns 9.74 ns 10 +replace bb to -- in std::string|256_cv 2.35 % 2.35 % 10 +replace bb to -- in std::string|512_mean 783 ns 783 ns 10 +replace bb to -- in std::string|512_median 782 ns 782 ns 10 +replace bb to -- in std::string|512_stddev 20.7 ns 20.7 ns 10 +replace bb to -- in std::string|512_cv 2.65 % 2.65 % 10 +replace bb to -- in std::string|1024_mean 1499 ns 1499 ns 10 +replace bb to -- in std::string|1024_median 1501 ns 1501 ns 10 +replace bb to -- in std::string|1024_stddev 35.8 ns 35.8 ns 10 +replace bb to -- in std::string|1024_cv 2.39 % 2.39 % 10 +replace bb to -- in std::string|2048_mean 2960 ns 2960 ns 10 +replace bb to -- in std::string|2048_median 2974 ns 2974 ns 10 +replace bb to -- in std::string|2048_stddev 58.4 ns 58.4 ns 10 +replace bb to -- in std::string|2048_cv 1.97 % 1.97 % 10 replace bb to -- in lstringa<8>|64_mean 101 ns 101 ns 10 -replace bb to -- in lstringa<8>|64_median 102 ns 102 ns 10 -replace bb to -- in lstringa<8>|64_stddev 1.73 ns 1.73 ns 10 -replace bb to -- in lstringa<8>|64_cv 1.70 % 1.70 % 10 -replace bb to -- in lstringa<8>|256_mean 302 ns 302 ns 10 -replace bb to -- in lstringa<8>|256_median 301 ns 301 ns 10 -replace bb to -- in lstringa<8>|256_stddev 8.49 ns 8.49 ns 10 -replace bb to -- in lstringa<8>|256_cv 2.81 % 2.81 % 10 -replace bb to -- in lstringa<8>|512_mean 579 ns 579 ns 10 -replace bb to -- in lstringa<8>|512_median 562 ns 562 ns 10 -replace bb to -- in lstringa<8>|512_stddev 51.0 ns 51.0 ns 10 -replace bb to -- in lstringa<8>|512_cv 8.81 % 8.81 % 10 -replace bb to -- in lstringa<8>|1024_mean 1181 ns 1181 ns 10 -replace bb to -- in lstringa<8>|1024_median 1166 ns 1166 ns 10 -replace bb to -- in lstringa<8>|1024_stddev 58.8 ns 58.8 ns 10 -replace bb to -- in lstringa<8>|1024_cv 4.98 % 4.98 % 10 -replace bb to -- in lstringa<8>|2048_mean 2181 ns 2181 ns 10 -replace bb to -- in lstringa<8>|2048_median 2186 ns 2186 ns 10 -replace bb to -- in lstringa<8>|2048_stddev 42.1 ns 42.1 ns 10 -replace bb to -- in lstringa<8>|2048_cv 1.93 % 1.93 % 10 -replace bb to -- by init stringa|64_mean 82.9 ns 82.9 ns 10 -replace bb to -- by init stringa|64_median 82.6 ns 82.6 ns 10 -replace bb to -- by init stringa|64_stddev 1.53 ns 1.53 ns 10 -replace bb to -- by init stringa|64_cv 1.84 % 1.84 % 10 -replace bb to -- by init stringa|256_mean 219 ns 219 ns 10 -replace bb to -- by init stringa|256_median 218 ns 218 ns 10 -replace bb to -- by init stringa|256_stddev 2.33 ns 2.33 ns 10 -replace bb to -- by init stringa|256_cv 1.07 % 1.07 % 10 -replace bb to -- by init stringa|512_mean 447 ns 447 ns 10 -replace bb to -- by init stringa|512_median 448 ns 448 ns 10 -replace bb to -- by init stringa|512_stddev 5.79 ns 5.79 ns 10 -replace bb to -- by init stringa|512_cv 1.30 % 1.30 % 10 -replace bb to -- by init stringa|1024_mean 880 ns 880 ns 10 +replace bb to -- in lstringa<8>|64_median 101 ns 101 ns 10 +replace bb to -- in lstringa<8>|64_stddev 2.76 ns 2.76 ns 10 +replace bb to -- in lstringa<8>|64_cv 2.73 % 2.73 % 10 +replace bb to -- in lstringa<8>|256_mean 326 ns 326 ns 10 +replace bb to -- in lstringa<8>|256_median 306 ns 306 ns 10 +replace bb to -- in lstringa<8>|256_stddev 41.2 ns 41.2 ns 10 +replace bb to -- in lstringa<8>|256_cv 12.61 % 12.61 % 10 +replace bb to -- in lstringa<8>|512_mean 569 ns 569 ns 10 +replace bb to -- in lstringa<8>|512_median 566 ns 566 ns 10 +replace bb to -- in lstringa<8>|512_stddev 18.1 ns 18.1 ns 10 +replace bb to -- in lstringa<8>|512_cv 3.17 % 3.18 % 10 +replace bb to -- in lstringa<8>|1024_mean 1128 ns 1128 ns 10 +replace bb to -- in lstringa<8>|1024_median 1132 ns 1132 ns 10 +replace bb to -- in lstringa<8>|1024_stddev 30.4 ns 30.4 ns 10 +replace bb to -- in lstringa<8>|1024_cv 2.70 % 2.70 % 10 +replace bb to -- in lstringa<8>|2048_mean 2155 ns 2155 ns 10 +replace bb to -- in lstringa<8>|2048_median 2125 ns 2125 ns 10 +replace bb to -- in lstringa<8>|2048_stddev 101 ns 101 ns 10 +replace bb to -- in lstringa<8>|2048_cv 4.68 % 4.68 % 10 +replace bb to -- by init stringa|64_mean 86.9 ns 86.9 ns 10 +replace bb to -- by init stringa|64_median 85.6 ns 85.6 ns 10 +replace bb to -- by init stringa|64_stddev 4.43 ns 4.43 ns 10 +replace bb to -- by init stringa|64_cv 5.10 % 5.10 % 10 +replace bb to -- by init stringa|256_mean 232 ns 232 ns 10 +replace bb to -- by init stringa|256_median 231 ns 231 ns 10 +replace bb to -- by init stringa|256_stddev 5.61 ns 5.61 ns 10 +replace bb to -- by init stringa|256_cv 2.42 % 2.42 % 10 +replace bb to -- by init stringa|512_mean 441 ns 441 ns 10 +replace bb to -- by init stringa|512_median 441 ns 441 ns 10 +replace bb to -- by init stringa|512_stddev 6.71 ns 6.71 ns 10 +replace bb to -- by init stringa|512_cv 1.52 % 1.52 % 10 +replace bb to -- by init stringa|1024_mean 883 ns 883 ns 10 replace bb to -- by init stringa|1024_median 877 ns 877 ns 10 -replace bb to -- by init stringa|1024_stddev 19.6 ns 19.6 ns 10 +replace bb to -- by init stringa|1024_stddev 19.7 ns 19.7 ns 10 replace bb to -- by init stringa|1024_cv 2.23 % 2.23 % 10 -replace bb to -- by init stringa|2048_mean 1654 ns 1654 ns 10 -replace bb to -- by init stringa|2048_median 1647 ns 1647 ns 10 -replace bb to -- by init stringa|2048_stddev 38.5 ns 38.5 ns 10 -replace bb to -- by init stringa|2048_cv 2.33 % 2.33 % 10 ------ Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -hashStrMapA emplace & find stringa;_mean 3718900 ns 3718917 ns 10 -hashStrMapA emplace & find stringa;_median 3693440 ns 3693461 ns 10 -hashStrMapA emplace & find stringa;_stddev 53764 ns 53763 ns 10 -hashStrMapA emplace & find stringa;_cv 1.45 % 1.45 % 10 -std::unordered_map emplace & find std::string;_mean 3691442 ns 3691453 ns 10 -std::unordered_map emplace & find std::string;_median 3673099 ns 3673111 ns 10 -std::unordered_map emplace & find std::string;_stddev 139694 ns 139694 ns 10 -std::unordered_map emplace & find std::string;_cv 3.78 % 3.78 % 10 -hashStrMapA emplace & find ssa;_mean 3719844 ns 3719860 ns 10 -hashStrMapA emplace & find ssa;_median 3711079 ns 3711094 ns 10 -hashStrMapA emplace & find ssa;_stddev 26128 ns 26129 ns 10 -hashStrMapA emplace & find ssa;_cv 0.70 % 0.70 % 10 -std::unordered_map emplace & find std::string_view;_mean 4115786 ns 4115803 ns 10 -std::unordered_map emplace & find std::string_view;_median 4138618 ns 4138635 ns 10 -std::unordered_map emplace & find std::string_view;_stddev 84101 ns 84103 ns 10 -std::unordered_map emplace & find std::string_view;_cv 2.04 % 2.04 % 10 ------ Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000 +replace bb to -- by init stringa|2048_mean 1670 ns 1670 ns 10 +replace bb to -- by init stringa|2048_median 1659 ns 1659 ns 10 +replace bb to -- by init stringa|2048_stddev 34.1 ns 34.1 ns 10 +replace bb to -- by init stringa|2048_cv 2.04 % 2.04 % 10 +----- Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +hashStrMapA emplace & find stringa;_mean 3565051 ns 3565054 ns 10 +hashStrMapA emplace & find stringa;_median 3563645 ns 3563657 ns 10 +hashStrMapA emplace & find stringa;_stddev 60616 ns 60600 ns 10 +hashStrMapA emplace & find stringa;_cv 1.70 % 1.70 % 10 +std::unordered_map emplace & find std::string;_mean 3504581 ns 3504582 ns 10 +std::unordered_map emplace & find std::string;_median 3492374 ns 3492358 ns 10 +std::unordered_map emplace & find std::string;_stddev 67478 ns 67484 ns 10 +std::unordered_map emplace & find std::string;_cv 1.93 % 1.93 % 10 +hashStrMapA emplace & find ssa;_mean 3648733 ns 3648738 ns 10 +hashStrMapA emplace & find ssa;_median 3643789 ns 3643806 ns 10 +hashStrMapA emplace & find ssa;_stddev 46557 ns 46567 ns 10 +hashStrMapA emplace & find ssa;_cv 1.28 % 1.28 % 10 +std::unordered_map emplace & find std::string_view;_mean 4252438 ns 4252417 ns 10 +std::unordered_map emplace & find std::string_view;_median 4162735 ns 4162699 ns 10 +std::unordered_map emplace & find std::string_view;_stddev 274815 ns 274779 ns 10 +std::unordered_map emplace & find std::string_view;_cv 6.46 % 6.46 % 10 +----- Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 Build func full name std::string;_mean 733 ns 733 ns 10 -Build func full name std::string;_median 733 ns 733 ns 10 -Build func full name std::string;_stddev 10.6 ns 10.6 ns 10 -Build func full name std::string;_cv 1.44 % 1.44 % 10 -Build func full name std::string 1;_mean 837 ns 837 ns 10 -Build func full name std::string 1;_median 832 ns 832 ns 10 -Build func full name std::string 1;_stddev 20.2 ns 20.2 ns 10 -Build func full name std::string 1;_cv 2.41 % 2.41 % 10 -Build func full name std::stream;_mean 2608 ns 2608 ns 10 -Build func full name std::stream;_median 2618 ns 2618 ns 10 -Build func full name std::stream;_stddev 46.4 ns 46.4 ns 10 -Build func full name std::stream;_cv 1.78 % 1.78 % 10 -Build func full name stringa;_mean 512 ns 512 ns 10 -Build func full name stringa;_median 509 ns 509 ns 10 -Build func full name stringa;_stddev 7.69 ns 7.69 ns 10 -Build func full name stringa;_cv 1.50 % 1.50 % 10 -Build func full name stringa 1;_mean 657 ns 657 ns 10 -Build func full name stringa 1;_median 656 ns 656 ns 10 -Build func full name stringa 1;_stddev 11.9 ns 11.9 ns 10 -Build func full name stringa 1;_cv 1.80 % 1.80 % 10 +Build func full name std::string;_median 737 ns 737 ns 10 +Build func full name std::string;_stddev 22.0 ns 22.0 ns 10 +Build func full name std::string;_cv 3.01 % 3.01 % 10 +Build func full name std::string 1;_mean 829 ns 829 ns 10 +Build func full name std::string 1;_median 823 ns 823 ns 10 +Build func full name std::string 1;_stddev 16.9 ns 16.9 ns 10 +Build func full name std::string 1;_cv 2.04 % 2.03 % 10 +Build func full name std::stream;_mean 2554 ns 2554 ns 10 +Build func full name std::stream;_median 2564 ns 2564 ns 10 +Build func full name std::stream;_stddev 25.0 ns 25.0 ns 10 +Build func full name std::stream;_cv 0.98 % 0.98 % 10 +Build func full name stringa;_mean 525 ns 525 ns 10 +Build func full name stringa;_median 525 ns 525 ns 10 +Build func full name stringa;_stddev 12.0 ns 12.0 ns 10 +Build func full name stringa;_cv 2.28 % 2.28 % 10 +Build func full name stringa 1;_mean 672 ns 672 ns 10 +Build func full name stringa 1;_median 664 ns 664 ns 10 +Build func full name stringa 1;_stddev 20.5 ns 20.5 ns 10 +Build func full name stringa 1;_cv 3.06 % 3.06 % 10 diff --git a/bench/results/001-Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13.txt b/bench/results/001-Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13.txt index e69963b..bc65f89 100644 --- a/bench/results/001-Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13.txt +++ b/bench/results/001-Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13.txt @@ -1,4 +1,4 @@ -2025-08-06T13:47:54+03:00 +2025-11-26T18:09:34+03:00 Running ./benchStr Run on (32 X 2494.22 MHz CPU s) CPU Caches: @@ -6,773 +6,786 @@ CPU Caches: L1 Instruction 32 KiB (x16) L2 Unified 256 KiB (x16) L3 Unified 40960 KiB (x1) -Load Average: 0.00, 0.00, 0.00 +Load Average: 0.02, 0.05, 0.12 -------------------------------------------------------------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------------------------------------------------------------- ------ Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e;_mean 1.19 ns 1.19 ns 10 -std::string e;_median 1.17 ns 1.17 ns 10 -std::string e;_stddev 0.087 ns 0.087 ns 10 -std::string e;_cv 7.32 % 7.32 % 10 -std::string_view e;_mean 0.759 ns 0.759 ns 10 -std::string_view e;_median 0.740 ns 0.740 ns 10 -std::string_view e;_stddev 0.033 ns 0.033 ns 10 -std::string_view e;_cv 4.40 % 4.40 % 10 +----- Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e;_mean 1.15 ns 1.15 ns 10 +std::string e;_median 1.14 ns 1.14 ns 10 +std::string e;_stddev 0.057 ns 0.057 ns 10 +std::string e;_cv 4.91 % 4.91 % 10 +std::string_view e;_mean 0.743 ns 0.743 ns 10 +std::string_view e;_median 0.743 ns 0.743 ns 10 +std::string_view e;_stddev 0.009 ns 0.009 ns 10 +std::string_view e;_cv 1.16 % 1.16 % 10 ssa e;_mean 0.185 ns 0.185 ns 10 -ssa e;_median 0.185 ns 0.185 ns 10 -ssa e;_stddev 0.004 ns 0.004 ns 10 -ssa e;_cv 2.05 % 2.05 % 10 +ssa e;_median 0.182 ns 0.182 ns 10 +ssa e;_stddev 0.005 ns 0.005 ns 10 +ssa e;_cv 2.95 % 2.95 % 10 stringa e;_mean 0.759 ns 0.759 ns 10 -stringa e;_median 0.756 ns 0.756 ns 10 -stringa e;_stddev 0.027 ns 0.027 ns 10 -stringa e;_cv 3.57 % 3.57 % 10 -lstringa<20> e;_mean 1.11 ns 1.11 ns 10 -lstringa<20> e;_median 1.11 ns 1.11 ns 10 -lstringa<20> e;_stddev 0.017 ns 0.017 ns 10 -lstringa<20> e;_cv 1.52 % 1.52 % 10 +stringa e;_median 0.753 ns 0.753 ns 10 +stringa e;_stddev 0.020 ns 0.020 ns 10 +stringa e;_cv 2.63 % 2.63 % 10 +lstringa<20> e;_mean 1.13 ns 1.13 ns 10 +lstringa<20> e;_median 1.12 ns 1.12 ns 10 +lstringa<20> e;_stddev 0.032 ns 0.032 ns 10 +lstringa<20> e;_cv 2.83 % 2.83 % 10 lstringa<40> e;_mean 1.13 ns 1.13 ns 10 -lstringa<40> e;_median 1.14 ns 1.14 ns 10 -lstringa<40> e;_stddev 0.025 ns 0.025 ns 10 -lstringa<40> e;_cv 2.19 % 2.19 % 10 ------ Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text";_mean 1.88 ns 1.88 ns 10 -std::string e = "Test text";_median 1.87 ns 1.87 ns 10 -std::string e = "Test text";_stddev 0.047 ns 0.047 ns 10 -std::string e = "Test text";_cv 2.47 % 2.47 % 10 -std::string_view e = "Test text";_mean 0.757 ns 0.757 ns 10 -std::string_view e = "Test text";_median 0.750 ns 0.750 ns 10 -std::string_view e = "Test text";_stddev 0.031 ns 0.031 ns 10 -std::string_view e = "Test text";_cv 4.04 % 4.04 % 10 -ssa e = "Test text";_mean 0.746 ns 0.746 ns 10 -ssa e = "Test text";_median 0.739 ns 0.739 ns 10 -ssa e = "Test text";_stddev 0.016 ns 0.016 ns 10 -ssa e = "Test text";_cv 2.14 % 2.14 % 10 -stringa e = "Test text";_mean 1.12 ns 1.12 ns 10 +lstringa<40> e;_median 1.12 ns 1.12 ns 10 +lstringa<40> e;_stddev 0.024 ns 0.024 ns 10 +lstringa<40> e;_cv 2.17 % 2.17 % 10 +----- Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text";_mean 1.85 ns 1.85 ns 10 +std::string e = "Test text";_median 1.84 ns 1.84 ns 10 +std::string e = "Test text";_stddev 0.026 ns 0.026 ns 10 +std::string e = "Test text";_cv 1.43 % 1.43 % 10 +std::string_view e = "Test text";_mean 0.751 ns 0.751 ns 10 +std::string_view e = "Test text";_median 0.748 ns 0.748 ns 10 +std::string_view e = "Test text";_stddev 0.011 ns 0.011 ns 10 +std::string_view e = "Test text";_cv 1.48 % 1.48 % 10 +ssa e = "Test text";_mean 0.781 ns 0.781 ns 10 +ssa e = "Test text";_median 0.753 ns 0.753 ns 10 +ssa e = "Test text";_stddev 0.062 ns 0.062 ns 10 +ssa e = "Test text";_cv 7.88 % 7.88 % 10 +stringa e = "Test text";_mean 1.13 ns 1.13 ns 10 stringa e = "Test text";_median 1.12 ns 1.12 ns 10 -stringa e = "Test text";_stddev 0.027 ns 0.027 ns 10 -stringa e = "Test text";_cv 2.38 % 2.38 % 10 -lstringa<20> e = "Test text";_mean 1.87 ns 1.87 ns 10 -lstringa<20> e = "Test text";_median 1.86 ns 1.86 ns 10 -lstringa<20> e = "Test text";_stddev 0.049 ns 0.049 ns 10 -lstringa<20> e = "Test text";_cv 2.64 % 2.64 % 10 -lstringa<40> e = "Test text";_mean 1.91 ns 1.91 ns 10 -lstringa<40> e = "Test text";_median 1.88 ns 1.88 ns 10 -lstringa<40> e = "Test text";_stddev 0.082 ns 0.082 ns 10 -lstringa<40> e = "Test text";_cv 4.30 % 4.30 % 10 ------ Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890";_mean 18.7 ns 18.7 ns 10 -std::string e = "123456789012345678901234567890";_median 18.5 ns 18.5 ns 10 -std::string e = "123456789012345678901234567890";_stddev 0.629 ns 0.629 ns 10 -std::string e = "123456789012345678901234567890";_cv 3.36 % 3.36 % 10 -std::string_view e = "123456789012345678901234567890";_mean 0.751 ns 0.751 ns 10 -std::string_view e = "123456789012345678901234567890";_median 0.741 ns 0.741 ns 10 -std::string_view e = "123456789012345678901234567890";_stddev 0.023 ns 0.023 ns 10 -std::string_view e = "123456789012345678901234567890";_cv 3.03 % 3.03 % 10 +stringa e = "Test text";_stddev 0.030 ns 0.030 ns 10 +stringa e = "Test text";_cv 2.62 % 2.62 % 10 +lstringa<20> e = "Test text";_mean 1.86 ns 1.86 ns 10 +lstringa<20> e = "Test text";_median 1.87 ns 1.87 ns 10 +lstringa<20> e = "Test text";_stddev 0.030 ns 0.030 ns 10 +lstringa<20> e = "Test text";_cv 1.62 % 1.62 % 10 +lstringa<40> e = "Test text";_mean 1.88 ns 1.88 ns 10 +lstringa<40> e = "Test text";_median 1.86 ns 1.86 ns 10 +lstringa<40> e = "Test text";_stddev 0.052 ns 0.052 ns 10 +lstringa<40> e = "Test text";_cv 2.78 % 2.78 % 10 +----- Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890";_mean 19.9 ns 19.9 ns 10 +std::string e = "123456789012345678901234567890";_median 19.6 ns 19.6 ns 10 +std::string e = "123456789012345678901234567890";_stddev 0.953 ns 0.953 ns 10 +std::string e = "123456789012345678901234567890";_cv 4.79 % 4.79 % 10 +std::string_view e = "123456789012345678901234567890";_mean 0.808 ns 0.808 ns 10 +std::string_view e = "123456789012345678901234567890";_median 0.833 ns 0.833 ns 10 +std::string_view e = "123456789012345678901234567890";_stddev 0.047 ns 0.047 ns 10 +std::string_view e = "123456789012345678901234567890";_cv 5.78 % 5.78 % 10 ssa e = "123456789012345678901234567890";_mean 0.754 ns 0.754 ns 10 -ssa e = "123456789012345678901234567890";_median 0.758 ns 0.758 ns 10 -ssa e = "123456789012345678901234567890";_stddev 0.021 ns 0.021 ns 10 -ssa e = "123456789012345678901234567890";_cv 2.79 % 2.79 % 10 -stringa e = "123456789012345678901234567890";_mean 1.13 ns 1.13 ns 10 -stringa e = "123456789012345678901234567890";_median 1.12 ns 1.12 ns 10 -stringa e = "123456789012345678901234567890";_stddev 0.026 ns 0.026 ns 10 -stringa e = "123456789012345678901234567890";_cv 2.29 % 2.29 % 10 +ssa e = "123456789012345678901234567890";_median 0.753 ns 0.753 ns 10 +ssa e = "123456789012345678901234567890";_stddev 0.013 ns 0.013 ns 10 +ssa e = "123456789012345678901234567890";_cv 1.68 % 1.68 % 10 +stringa e = "123456789012345678901234567890";_mean 1.12 ns 1.12 ns 10 +stringa e = "123456789012345678901234567890";_median 1.13 ns 1.13 ns 10 +stringa e = "123456789012345678901234567890";_stddev 0.020 ns 0.020 ns 10 +stringa e = "123456789012345678901234567890";_cv 1.77 % 1.77 % 10 lstringa<20> e = "123456789012345678901234567890";_mean 19.6 ns 19.6 ns 10 -lstringa<20> e = "123456789012345678901234567890";_median 19.3 ns 19.3 ns 10 -lstringa<20> e = "123456789012345678901234567890";_stddev 0.546 ns 0.546 ns 10 -lstringa<20> e = "123456789012345678901234567890";_cv 2.78 % 2.78 % 10 -lstringa<40> e = "123456789012345678901234567890";_mean 2.59 ns 2.59 ns 10 -lstringa<40> e = "123456789012345678901234567890";_median 2.56 ns 2.56 ns 10 -lstringa<40> e = "123456789012345678901234567890";_stddev 0.055 ns 0.055 ns 10 -lstringa<40> e = "123456789012345678901234567890";_cv 2.14 % 2.14 % 10 ------ Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text"; auto c{e};_mean 4.91 ns 4.91 ns 10 -std::string e = "Test text"; auto c{e};_median 4.87 ns 4.87 ns 10 -std::string e = "Test text"; auto c{e};_stddev 0.160 ns 0.160 ns 10 -std::string e = "Test text"; auto c{e};_cv 3.26 % 3.26 % 10 -std::string_view e = "Test text"; auto c{e};_mean 0.377 ns 0.377 ns 10 -std::string_view e = "Test text"; auto c{e};_median 0.375 ns 0.375 ns 10 -std::string_view e = "Test text"; auto c{e};_stddev 0.015 ns 0.015 ns 10 -std::string_view e = "Test text"; auto c{e};_cv 3.90 % 3.90 % 10 -ssa e = "Test text"; auto c{e};_mean 0.378 ns 0.378 ns 10 -ssa e = "Test text"; auto c{e};_median 0.372 ns 0.372 ns 10 -ssa e = "Test text"; auto c{e};_stddev 0.015 ns 0.015 ns 10 -ssa e = "Test text"; auto c{e};_cv 3.95 % 3.95 % 10 -stringa e = "Test text"; auto c{e};_mean 1.14 ns 1.14 ns 10 -stringa e = "Test text"; auto c{e};_median 1.13 ns 1.13 ns 10 -stringa e = "Test text"; auto c{e};_stddev 0.031 ns 0.031 ns 10 -stringa e = "Test text"; auto c{e};_cv 2.70 % 2.70 % 10 -lstringa<20> e = "Test text"; auto c{e};_mean 4.84 ns 4.84 ns 10 -lstringa<20> e = "Test text"; auto c{e};_median 4.81 ns 4.81 ns 10 -lstringa<20> e = "Test text"; auto c{e};_stddev 0.090 ns 0.090 ns 10 -lstringa<20> e = "Test text"; auto c{e};_cv 1.85 % 1.85 % 10 -lstringa<40> e = "Test text"; auto c{e};_mean 4.60 ns 4.60 ns 10 -lstringa<40> e = "Test text"; auto c{e};_median 4.54 ns 4.54 ns 10 -lstringa<40> e = "Test text"; auto c{e};_stddev 0.189 ns 0.189 ns 10 -lstringa<40> e = "Test text"; auto c{e};_cv 4.10 % 4.10 % 10 ------ Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 +lstringa<20> e = "123456789012345678901234567890";_median 19.6 ns 19.6 ns 10 +lstringa<20> e = "123456789012345678901234567890";_stddev 0.348 ns 0.348 ns 10 +lstringa<20> e = "123456789012345678901234567890";_cv 1.77 % 1.77 % 10 +lstringa<40> e = "123456789012345678901234567890";_mean 1.86 ns 1.86 ns 10 +lstringa<40> e = "123456789012345678901234567890";_median 1.86 ns 1.86 ns 10 +lstringa<40> e = "123456789012345678901234567890";_stddev 0.027 ns 0.027 ns 10 +lstringa<40> e = "123456789012345678901234567890";_cv 1.46 % 1.46 % 10 +----- Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text"; auto c{e};_mean 4.95 ns 4.95 ns 10 +std::string e = "Test text"; auto c{e};_median 4.95 ns 4.95 ns 10 +std::string e = "Test text"; auto c{e};_stddev 0.102 ns 0.102 ns 10 +std::string e = "Test text"; auto c{e};_cv 2.06 % 2.06 % 10 +std::string_view e = "Test text"; auto c{e};_mean 0.381 ns 0.381 ns 10 +std::string_view e = "Test text"; auto c{e};_median 0.381 ns 0.381 ns 10 +std::string_view e = "Test text"; auto c{e};_stddev 0.005 ns 0.005 ns 10 +std::string_view e = "Test text"; auto c{e};_cv 1.28 % 1.28 % 10 +ssa e = "Test text"; auto c{e};_mean 0.377 ns 0.377 ns 10 +ssa e = "Test text"; auto c{e};_median 0.376 ns 0.376 ns 10 +ssa e = "Test text"; auto c{e};_stddev 0.009 ns 0.009 ns 10 +ssa e = "Test text"; auto c{e};_cv 2.46 % 2.46 % 10 +stringa e = "Test text"; auto c{e};_mean 1.35 ns 1.35 ns 10 +stringa e = "Test text"; auto c{e};_median 1.34 ns 1.34 ns 10 +stringa e = "Test text"; auto c{e};_stddev 0.055 ns 0.055 ns 10 +stringa e = "Test text"; auto c{e};_cv 4.07 % 4.07 % 10 +lstringa<20> e = "Test text"; auto c{e};_mean 4.49 ns 4.49 ns 10 +lstringa<20> e = "Test text"; auto c{e};_median 4.49 ns 4.49 ns 10 +lstringa<20> e = "Test text"; auto c{e};_stddev 0.043 ns 0.043 ns 10 +lstringa<20> e = "Test text"; auto c{e};_cv 0.95 % 0.95 % 10 +lstringa<40> e = "Test text"; auto c{e};_mean 4.93 ns 4.93 ns 10 +lstringa<40> e = "Test text"; auto c{e};_median 4.92 ns 4.92 ns 10 +lstringa<40> e = "Test text"; auto c{e};_stddev 0.083 ns 0.083 ns 10 +lstringa<40> e = "Test text"; auto c{e};_cv 1.68 % 1.68 % 10 +----- Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 std::string e = "123456789012345678901234567890"; auto c{e};_mean 24.2 ns 24.2 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_median 24.0 ns 24.0 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_stddev 0.450 ns 0.450 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_cv 1.86 % 1.86 % 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 0.746 ns 0.746 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_median 0.741 ns 0.741 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.021 ns 0.021 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 2.85 % 2.85 % 10 -ssa e = "123456789012345678901234567890"; auto c{e};_mean 0.744 ns 0.744 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_median 0.741 ns 0.741 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.010 ns 0.010 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_cv 1.35 % 1.35 % 10 +std::string e = "123456789012345678901234567890"; auto c{e};_median 24.1 ns 24.1 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_stddev 0.503 ns 0.503 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_cv 2.08 % 2.08 % 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 0.747 ns 0.747 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_median 0.748 ns 0.748 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.006 ns 0.006 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 0.77 % 0.77 % 10 +ssa e = "123456789012345678901234567890"; auto c{e};_mean 0.746 ns 0.746 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_median 0.744 ns 0.744 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.012 ns 0.012 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_cv 1.68 % 1.68 % 10 stringa e = "123456789012345678901234567890"; auto c{e};_mean 1.13 ns 1.13 ns 10 stringa e = "123456789012345678901234567890"; auto c{e};_median 1.13 ns 1.13 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.030 ns 0.030 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_cv 2.63 % 2.63 % 10 +stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.013 ns 0.013 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_cv 1.18 % 1.18 % 10 lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 24.4 ns 24.4 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 24.3 ns 24.3 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 0.796 ns 0.796 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 3.26 % 3.26 % 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 5.62 ns 5.62 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 5.50 ns 5.50 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.242 ns 0.242 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 4.30 % 4.30 % 10 ------ Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find;_mean 7.11 ns 7.11 ns 10 -std::string::find;_median 7.08 ns 7.08 ns 10 -std::string::find;_stddev 0.117 ns 0.117 ns 10 -std::string::find;_cv 1.65 % 1.65 % 10 -std::string_view::find;_mean 6.43 ns 6.43 ns 10 -std::string_view::find;_median 6.38 ns 6.38 ns 10 -std::string_view::find;_stddev 0.242 ns 0.242 ns 10 -std::string_view::find;_cv 3.76 % 3.76 % 10 -ssa::find;_mean 6.47 ns 6.47 ns 10 -ssa::find;_median 6.41 ns 6.41 ns 10 -ssa::find;_stddev 0.241 ns 0.241 ns 10 -ssa::find;_cv 3.72 % 3.72 % 10 -stringa::find;_mean 6.83 ns 6.83 ns 10 -stringa::find;_median 6.74 ns 6.74 ns 10 -stringa::find;_stddev 0.269 ns 0.269 ns 10 -stringa::find;_cv 3.94 % 3.94 % 10 -lstringa<20>::find;_mean 6.88 ns 6.88 ns 10 -lstringa<20>::find;_median 6.78 ns 6.78 ns 10 -lstringa<20>::find;_stddev 0.288 ns 0.288 ns 10 -lstringa<20>::find;_cv 4.18 % 4.18 % 10 -lstringa<40>::find;_mean 6.80 ns 6.80 ns 10 -lstringa<40>::find;_median 6.75 ns 6.75 ns 10 -lstringa<40>::find;_stddev 0.164 ns 0.164 ns 10 -lstringa<40>::find;_cv 2.41 % 2.41 % 10 -------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string copy{str_with_len_N};/15_mean 7.34 ns 7.34 ns 10 -std::string copy{str_with_len_N};/15_median 7.19 ns 7.19 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 24.0 ns 24.0 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 1.02 ns 1.02 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 4.17 % 4.17 % 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 4.61 ns 4.61 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 4.56 ns 4.56 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.154 ns 0.154 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 3.35 % 3.35 % 10 +----- Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find;_mean 6.87 ns 6.87 ns 10 +std::string::find;_median 6.78 ns 6.78 ns 10 +std::string::find;_stddev 0.324 ns 0.324 ns 10 +std::string::find;_cv 4.71 % 4.71 % 10 +std::string_view::find;_mean 7.39 ns 7.39 ns 10 +std::string_view::find;_median 7.29 ns 7.29 ns 10 +std::string_view::find;_stddev 0.225 ns 0.225 ns 10 +std::string_view::find;_cv 3.05 % 3.05 % 10 +ssa::find;_mean 6.93 ns 6.93 ns 10 +ssa::find;_median 6.85 ns 6.85 ns 10 +ssa::find;_stddev 0.311 ns 0.311 ns 10 +ssa::find;_cv 4.49 % 4.49 % 10 +stringa::find;_mean 8.00 ns 8.00 ns 10 +stringa::find;_median 7.71 ns 7.71 ns 10 +stringa::find;_stddev 0.857 ns 0.857 ns 10 +stringa::find;_cv 10.72 % 10.72 % 10 +lstringa<20>::find;_mean 6.92 ns 6.93 ns 10 +lstringa<20>::find;_median 6.91 ns 6.91 ns 10 +lstringa<20>::find;_stddev 0.187 ns 0.187 ns 10 +lstringa<20>::find;_cv 2.71 % 2.71 % 10 +lstringa<40>::find;_mean 6.87 ns 6.87 ns 10 +lstringa<40>::find;_median 6.84 ns 6.84 ns 10 +lstringa<40>::find;_stddev 0.208 ns 0.208 ns 10 +lstringa<40>::find;_cv 3.03 % 3.03 % 10 +------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string copy{str_with_len_N};/15_mean 5.07 ns 5.07 ns 10 +std::string copy{str_with_len_N};/15_median 4.96 ns 4.96 ns 10 std::string copy{str_with_len_N};/15_stddev 0.277 ns 0.277 ns 10 -std::string copy{str_with_len_N};/15_cv 3.77 % 3.77 % 10 -std::string copy{str_with_len_N};/16_mean 24.8 ns 24.8 ns 10 -std::string copy{str_with_len_N};/16_median 24.7 ns 24.8 ns 10 -std::string copy{str_with_len_N};/16_stddev 0.837 ns 0.837 ns 10 -std::string copy{str_with_len_N};/16_cv 3.37 % 3.37 % 10 -std::string copy{str_with_len_N};/23_mean 25.3 ns 25.3 ns 10 -std::string copy{str_with_len_N};/23_median 25.6 ns 25.6 ns 10 -std::string copy{str_with_len_N};/23_stddev 0.737 ns 0.737 ns 10 -std::string copy{str_with_len_N};/23_cv 2.92 % 2.92 % 10 -std::string copy{str_with_len_N};/24_mean 24.6 ns 24.6 ns 10 -std::string copy{str_with_len_N};/24_median 24.6 ns 24.6 ns 10 -std::string copy{str_with_len_N};/24_stddev 0.566 ns 0.566 ns 10 -std::string copy{str_with_len_N};/24_cv 2.30 % 2.30 % 10 -std::string copy{str_with_len_N};/32_mean 23.9 ns 23.9 ns 10 -std::string copy{str_with_len_N};/32_median 23.9 ns 23.9 ns 10 -std::string copy{str_with_len_N};/32_stddev 0.236 ns 0.236 ns 10 -std::string copy{str_with_len_N};/32_cv 0.99 % 0.99 % 10 -std::string copy{str_with_len_N};/64_mean 24.1 ns 24.1 ns 10 -std::string copy{str_with_len_N};/64_median 23.9 ns 23.9 ns 10 -std::string copy{str_with_len_N};/64_stddev 0.627 ns 0.627 ns 10 -std::string copy{str_with_len_N};/64_cv 2.60 % 2.60 % 10 -std::string copy{str_with_len_N};/128_mean 26.1 ns 26.1 ns 10 -std::string copy{str_with_len_N};/128_median 26.1 ns 26.1 ns 10 -std::string copy{str_with_len_N};/128_stddev 0.285 ns 0.285 ns 10 -std::string copy{str_with_len_N};/128_cv 1.09 % 1.09 % 10 -std::string copy{str_with_len_N};/256_mean 26.6 ns 26.6 ns 10 -std::string copy{str_with_len_N};/256_median 26.5 ns 26.5 ns 10 -std::string copy{str_with_len_N};/256_stddev 0.690 ns 0.690 ns 10 -std::string copy{str_with_len_N};/256_cv 2.60 % 2.60 % 10 -std::string copy{str_with_len_N};/512_mean 30.8 ns 30.8 ns 10 -std::string copy{str_with_len_N};/512_median 30.3 ns 30.3 ns 10 -std::string copy{str_with_len_N};/512_stddev 1.13 ns 1.13 ns 10 -std::string copy{str_with_len_N};/512_cv 3.68 % 3.68 % 10 -std::string copy{str_with_len_N};/1024_mean 41.2 ns 41.2 ns 10 -std::string copy{str_with_len_N};/1024_median 40.9 ns 40.9 ns 10 -std::string copy{str_with_len_N};/1024_stddev 1.67 ns 1.67 ns 10 -std::string copy{str_with_len_N};/1024_cv 4.06 % 4.06 % 10 -std::string copy{str_with_len_N};/2048_mean 111 ns 111 ns 10 -std::string copy{str_with_len_N};/2048_median 111 ns 111 ns 10 -std::string copy{str_with_len_N};/2048_stddev 7.17 ns 7.17 ns 10 -std::string copy{str_with_len_N};/2048_cv 6.44 % 6.44 % 10 -std::string copy{str_with_len_N};/4096_mean 139 ns 139 ns 10 -std::string copy{str_with_len_N};/4096_median 140 ns 140 ns 10 -std::string copy{str_with_len_N};/4096_stddev 7.50 ns 7.50 ns 10 -std::string copy{str_with_len_N};/4096_cv 5.41 % 5.41 % 10 -stringa copy{str_with_len_N};/15_mean 1.11 ns 1.11 ns 10 -stringa copy{str_with_len_N};/15_median 1.10 ns 1.10 ns 10 -stringa copy{str_with_len_N};/15_stddev 0.023 ns 0.023 ns 10 -stringa copy{str_with_len_N};/15_cv 2.05 % 2.05 % 10 -stringa copy{str_with_len_N};/16_mean 1.12 ns 1.12 ns 10 -stringa copy{str_with_len_N};/16_median 1.11 ns 1.11 ns 10 -stringa copy{str_with_len_N};/16_stddev 0.032 ns 0.032 ns 10 -stringa copy{str_with_len_N};/16_cv 2.87 % 2.87 % 10 -stringa copy{str_with_len_N};/23_mean 1.11 ns 1.11 ns 10 -stringa copy{str_with_len_N};/23_median 1.10 ns 1.10 ns 10 -stringa copy{str_with_len_N};/23_stddev 0.023 ns 0.023 ns 10 -stringa copy{str_with_len_N};/23_cv 2.11 % 2.11 % 10 -stringa copy{str_with_len_N};/24_mean 16.2 ns 16.2 ns 10 -stringa copy{str_with_len_N};/24_median 16.0 ns 16.0 ns 10 -stringa copy{str_with_len_N};/24_stddev 0.541 ns 0.541 ns 10 -stringa copy{str_with_len_N};/24_cv 3.33 % 3.33 % 10 +std::string copy{str_with_len_N};/15_cv 5.46 % 5.46 % 10 +std::string copy{str_with_len_N};/16_mean 23.7 ns 23.7 ns 10 +std::string copy{str_with_len_N};/16_median 23.5 ns 23.5 ns 10 +std::string copy{str_with_len_N};/16_stddev 0.591 ns 0.591 ns 10 +std::string copy{str_with_len_N};/16_cv 2.50 % 2.50 % 10 +std::string copy{str_with_len_N};/23_mean 23.9 ns 23.9 ns 10 +std::string copy{str_with_len_N};/23_median 23.7 ns 23.7 ns 10 +std::string copy{str_with_len_N};/23_stddev 1.15 ns 1.15 ns 10 +std::string copy{str_with_len_N};/23_cv 4.82 % 4.82 % 10 +std::string copy{str_with_len_N};/24_mean 24.9 ns 24.9 ns 10 +std::string copy{str_with_len_N};/24_median 25.0 ns 25.0 ns 10 +std::string copy{str_with_len_N};/24_stddev 1.92 ns 1.92 ns 10 +std::string copy{str_with_len_N};/24_cv 7.72 % 7.72 % 10 +std::string copy{str_with_len_N};/32_mean 22.6 ns 22.6 ns 10 +std::string copy{str_with_len_N};/32_median 22.6 ns 22.6 ns 10 +std::string copy{str_with_len_N};/32_stddev 0.319 ns 0.319 ns 10 +std::string copy{str_with_len_N};/32_cv 1.41 % 1.41 % 10 +std::string copy{str_with_len_N};/64_mean 22.9 ns 22.9 ns 10 +std::string copy{str_with_len_N};/64_median 22.8 ns 22.8 ns 10 +std::string copy{str_with_len_N};/64_stddev 0.582 ns 0.582 ns 10 +std::string copy{str_with_len_N};/64_cv 2.54 % 2.54 % 10 +std::string copy{str_with_len_N};/128_mean 24.2 ns 24.2 ns 10 +std::string copy{str_with_len_N};/128_median 24.2 ns 24.2 ns 10 +std::string copy{str_with_len_N};/128_stddev 0.560 ns 0.560 ns 10 +std::string copy{str_with_len_N};/128_cv 2.31 % 2.31 % 10 +std::string copy{str_with_len_N};/256_mean 25.5 ns 25.5 ns 10 +std::string copy{str_with_len_N};/256_median 25.2 ns 25.2 ns 10 +std::string copy{str_with_len_N};/256_stddev 0.554 ns 0.554 ns 10 +std::string copy{str_with_len_N};/256_cv 2.18 % 2.18 % 10 +std::string copy{str_with_len_N};/512_mean 29.2 ns 29.2 ns 10 +std::string copy{str_with_len_N};/512_median 29.3 ns 29.3 ns 10 +std::string copy{str_with_len_N};/512_stddev 0.352 ns 0.352 ns 10 +std::string copy{str_with_len_N};/512_cv 1.21 % 1.21 % 10 +std::string copy{str_with_len_N};/1024_mean 37.2 ns 37.2 ns 10 +std::string copy{str_with_len_N};/1024_median 36.8 ns 36.8 ns 10 +std::string copy{str_with_len_N};/1024_stddev 1.63 ns 1.63 ns 10 +std::string copy{str_with_len_N};/1024_cv 4.38 % 4.38 % 10 +std::string copy{str_with_len_N};/2048_mean 81.5 ns 81.5 ns 10 +std::string copy{str_with_len_N};/2048_median 78.4 ns 78.4 ns 10 +std::string copy{str_with_len_N};/2048_stddev 8.26 ns 8.26 ns 10 +std::string copy{str_with_len_N};/2048_cv 10.14 % 10.14 % 10 +std::string copy{str_with_len_N};/4096_mean 118 ns 118 ns 10 +std::string copy{str_with_len_N};/4096_median 116 ns 116 ns 10 +std::string copy{str_with_len_N};/4096_stddev 7.18 ns 7.18 ns 10 +std::string copy{str_with_len_N};/4096_cv 6.11 % 6.11 % 10 +stringa copy{str_with_len_N};/15_mean 1.13 ns 1.13 ns 10 +stringa copy{str_with_len_N};/15_median 1.14 ns 1.14 ns 10 +stringa copy{str_with_len_N};/15_stddev 0.026 ns 0.026 ns 10 +stringa copy{str_with_len_N};/15_cv 2.33 % 2.33 % 10 +stringa copy{str_with_len_N};/16_mean 1.14 ns 1.14 ns 10 +stringa copy{str_with_len_N};/16_median 1.13 ns 1.13 ns 10 +stringa copy{str_with_len_N};/16_stddev 0.039 ns 0.039 ns 10 +stringa copy{str_with_len_N};/16_cv 3.39 % 3.39 % 10 +stringa copy{str_with_len_N};/23_mean 1.20 ns 1.20 ns 10 +stringa copy{str_with_len_N};/23_median 1.18 ns 1.18 ns 10 +stringa copy{str_with_len_N};/23_stddev 0.088 ns 0.088 ns 10 +stringa copy{str_with_len_N};/23_cv 7.37 % 7.37 % 10 +stringa copy{str_with_len_N};/24_mean 16.3 ns 16.3 ns 10 +stringa copy{str_with_len_N};/24_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/24_stddev 0.461 ns 0.461 ns 10 +stringa copy{str_with_len_N};/24_cv 2.83 % 2.83 % 10 stringa copy{str_with_len_N};/32_mean 16.2 ns 16.2 ns 10 stringa copy{str_with_len_N};/32_median 16.0 ns 16.0 ns 10 -stringa copy{str_with_len_N};/32_stddev 0.374 ns 0.374 ns 10 -stringa copy{str_with_len_N};/32_cv 2.32 % 2.32 % 10 -stringa copy{str_with_len_N};/64_mean 16.8 ns 16.8 ns 10 -stringa copy{str_with_len_N};/64_median 16.6 ns 16.6 ns 10 -stringa copy{str_with_len_N};/64_stddev 0.604 ns 0.604 ns 10 -stringa copy{str_with_len_N};/64_cv 3.59 % 3.59 % 10 +stringa copy{str_with_len_N};/32_stddev 0.434 ns 0.434 ns 10 +stringa copy{str_with_len_N};/32_cv 2.68 % 2.68 % 10 +stringa copy{str_with_len_N};/64_mean 16.2 ns 16.2 ns 10 +stringa copy{str_with_len_N};/64_median 16.2 ns 16.2 ns 10 +stringa copy{str_with_len_N};/64_stddev 0.167 ns 0.167 ns 10 +stringa copy{str_with_len_N};/64_cv 1.03 % 1.03 % 10 stringa copy{str_with_len_N};/128_mean 16.3 ns 16.3 ns 10 stringa copy{str_with_len_N};/128_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/128_stddev 0.263 ns 0.263 ns 10 -stringa copy{str_with_len_N};/128_cv 1.62 % 1.62 % 10 -stringa copy{str_with_len_N};/256_mean 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/256_median 16.2 ns 16.2 ns 10 -stringa copy{str_with_len_N};/256_stddev 0.244 ns 0.244 ns 10 -stringa copy{str_with_len_N};/256_cv 1.50 % 1.50 % 10 -stringa copy{str_with_len_N};/512_mean 16.4 ns 16.4 ns 10 -stringa copy{str_with_len_N};/512_median 16.3 ns 16.3 ns 10 -stringa copy{str_with_len_N};/512_stddev 0.290 ns 0.290 ns 10 -stringa copy{str_with_len_N};/512_cv 1.77 % 1.77 % 10 -stringa copy{str_with_len_N};/1024_mean 16.2 ns 16.2 ns 10 -stringa copy{str_with_len_N};/1024_median 16.1 ns 16.1 ns 10 -stringa copy{str_with_len_N};/1024_stddev 0.186 ns 0.186 ns 10 -stringa copy{str_with_len_N};/1024_cv 1.15 % 1.15 % 10 -stringa copy{str_with_len_N};/2048_mean 16.2 ns 16.2 ns 10 -stringa copy{str_with_len_N};/2048_median 16.2 ns 16.2 ns 10 -stringa copy{str_with_len_N};/2048_stddev 0.171 ns 0.171 ns 10 -stringa copy{str_with_len_N};/2048_cv 1.06 % 1.06 % 10 +stringa copy{str_with_len_N};/128_stddev 0.223 ns 0.223 ns 10 +stringa copy{str_with_len_N};/128_cv 1.37 % 1.37 % 10 +stringa copy{str_with_len_N};/256_mean 16.2 ns 16.2 ns 10 +stringa copy{str_with_len_N};/256_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/256_stddev 0.245 ns 0.245 ns 10 +stringa copy{str_with_len_N};/256_cv 1.52 % 1.52 % 10 +stringa copy{str_with_len_N};/512_mean 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/512_median 16.1 ns 16.1 ns 10 +stringa copy{str_with_len_N};/512_stddev 0.071 ns 0.071 ns 10 +stringa copy{str_with_len_N};/512_cv 0.44 % 0.44 % 10 +stringa copy{str_with_len_N};/1024_mean 16.5 ns 16.5 ns 10 +stringa copy{str_with_len_N};/1024_median 16.5 ns 16.5 ns 10 +stringa copy{str_with_len_N};/1024_stddev 0.232 ns 0.232 ns 10 +stringa copy{str_with_len_N};/1024_cv 1.41 % 1.41 % 10 +stringa copy{str_with_len_N};/2048_mean 16.3 ns 16.3 ns 10 +stringa copy{str_with_len_N};/2048_median 16.5 ns 16.5 ns 10 +stringa copy{str_with_len_N};/2048_stddev 0.290 ns 0.290 ns 10 +stringa copy{str_with_len_N};/2048_cv 1.78 % 1.78 % 10 stringa copy{str_with_len_N};/4096_mean 16.2 ns 16.2 ns 10 stringa copy{str_with_len_N};/4096_median 16.1 ns 16.1 ns 10 -stringa copy{str_with_len_N};/4096_stddev 0.266 ns 0.266 ns 10 -stringa copy{str_with_len_N};/4096_cv 1.64 % 1.64 % 10 -lstringa<16> copy{str_with_len_N};/15_mean 4.87 ns 4.87 ns 10 -lstringa<16> copy{str_with_len_N};/15_median 4.84 ns 4.84 ns 10 -lstringa<16> copy{str_with_len_N};/15_stddev 0.113 ns 0.113 ns 10 -lstringa<16> copy{str_with_len_N};/15_cv 2.32 % 2.32 % 10 -lstringa<16> copy{str_with_len_N};/16_mean 4.83 ns 4.83 ns 10 -lstringa<16> copy{str_with_len_N};/16_median 4.82 ns 4.82 ns 10 -lstringa<16> copy{str_with_len_N};/16_stddev 0.074 ns 0.074 ns 10 -lstringa<16> copy{str_with_len_N};/16_cv 1.54 % 1.54 % 10 -lstringa<16> copy{str_with_len_N};/23_mean 4.90 ns 4.90 ns 10 -lstringa<16> copy{str_with_len_N};/23_median 4.86 ns 4.86 ns 10 -lstringa<16> copy{str_with_len_N};/23_stddev 0.146 ns 0.146 ns 10 -lstringa<16> copy{str_with_len_N};/23_cv 2.99 % 2.99 % 10 +stringa copy{str_with_len_N};/4096_stddev 0.246 ns 0.246 ns 10 +stringa copy{str_with_len_N};/4096_cv 1.52 % 1.52 % 10 +lstringa<16> copy{str_with_len_N};/15_mean 4.88 ns 4.88 ns 10 +lstringa<16> copy{str_with_len_N};/15_median 4.88 ns 4.88 ns 10 +lstringa<16> copy{str_with_len_N};/15_stddev 0.134 ns 0.134 ns 10 +lstringa<16> copy{str_with_len_N};/15_cv 2.76 % 2.76 % 10 +lstringa<16> copy{str_with_len_N};/16_mean 4.89 ns 4.89 ns 10 +lstringa<16> copy{str_with_len_N};/16_median 4.89 ns 4.89 ns 10 +lstringa<16> copy{str_with_len_N};/16_stddev 0.071 ns 0.071 ns 10 +lstringa<16> copy{str_with_len_N};/16_cv 1.44 % 1.44 % 10 +lstringa<16> copy{str_with_len_N};/23_mean 5.01 ns 5.01 ns 10 +lstringa<16> copy{str_with_len_N};/23_median 4.95 ns 4.95 ns 10 +lstringa<16> copy{str_with_len_N};/23_stddev 0.265 ns 0.265 ns 10 +lstringa<16> copy{str_with_len_N};/23_cv 5.30 % 5.30 % 10 lstringa<16> copy{str_with_len_N};/24_mean 25.0 ns 25.0 ns 10 -lstringa<16> copy{str_with_len_N};/24_median 24.7 ns 24.7 ns 10 -lstringa<16> copy{str_with_len_N};/24_stddev 0.875 ns 0.875 ns 10 -lstringa<16> copy{str_with_len_N};/24_cv 3.50 % 3.50 % 10 -lstringa<16> copy{str_with_len_N};/32_mean 25.0 ns 25.1 ns 10 -lstringa<16> copy{str_with_len_N};/32_median 24.8 ns 24.8 ns 10 -lstringa<16> copy{str_with_len_N};/32_stddev 1.05 ns 1.05 ns 10 -lstringa<16> copy{str_with_len_N};/32_cv 4.20 % 4.20 % 10 +lstringa<16> copy{str_with_len_N};/24_median 24.9 ns 24.9 ns 10 +lstringa<16> copy{str_with_len_N};/24_stddev 0.874 ns 0.874 ns 10 +lstringa<16> copy{str_with_len_N};/24_cv 3.49 % 3.49 % 10 +lstringa<16> copy{str_with_len_N};/32_mean 24.5 ns 24.5 ns 10 +lstringa<16> copy{str_with_len_N};/32_median 24.6 ns 24.6 ns 10 +lstringa<16> copy{str_with_len_N};/32_stddev 0.286 ns 0.286 ns 10 +lstringa<16> copy{str_with_len_N};/32_cv 1.17 % 1.17 % 10 lstringa<16> copy{str_with_len_N};/64_mean 25.9 ns 25.9 ns 10 -lstringa<16> copy{str_with_len_N};/64_median 25.7 ns 25.7 ns 10 -lstringa<16> copy{str_with_len_N};/64_stddev 0.649 ns 0.649 ns 10 -lstringa<16> copy{str_with_len_N};/64_cv 2.51 % 2.51 % 10 -lstringa<16> copy{str_with_len_N};/128_mean 27.0 ns 27.0 ns 10 -lstringa<16> copy{str_with_len_N};/128_median 26.9 ns 26.9 ns 10 -lstringa<16> copy{str_with_len_N};/128_stddev 0.661 ns 0.661 ns 10 -lstringa<16> copy{str_with_len_N};/128_cv 2.45 % 2.45 % 10 -lstringa<16> copy{str_with_len_N};/256_mean 28.3 ns 28.3 ns 10 -lstringa<16> copy{str_with_len_N};/256_median 27.8 ns 27.8 ns 10 -lstringa<16> copy{str_with_len_N};/256_stddev 1.33 ns 1.33 ns 10 -lstringa<16> copy{str_with_len_N};/256_cv 4.70 % 4.70 % 10 -lstringa<16> copy{str_with_len_N};/512_mean 30.7 ns 30.7 ns 10 -lstringa<16> copy{str_with_len_N};/512_median 30.6 ns 30.6 ns 10 -lstringa<16> copy{str_with_len_N};/512_stddev 0.663 ns 0.663 ns 10 -lstringa<16> copy{str_with_len_N};/512_cv 2.16 % 2.16 % 10 -lstringa<16> copy{str_with_len_N};/1024_mean 83.7 ns 83.7 ns 10 -lstringa<16> copy{str_with_len_N};/1024_median 83.5 ns 83.5 ns 10 -lstringa<16> copy{str_with_len_N};/1024_stddev 4.33 ns 4.33 ns 10 -lstringa<16> copy{str_with_len_N};/1024_cv 5.17 % 5.17 % 10 -lstringa<16> copy{str_with_len_N};/2048_mean 97.7 ns 97.7 ns 10 -lstringa<16> copy{str_with_len_N};/2048_median 96.1 ns 96.1 ns 10 -lstringa<16> copy{str_with_len_N};/2048_stddev 8.19 ns 8.19 ns 10 -lstringa<16> copy{str_with_len_N};/2048_cv 8.38 % 8.38 % 10 -lstringa<16> copy{str_with_len_N};/4096_mean 116 ns 116 ns 10 -lstringa<16> copy{str_with_len_N};/4096_median 116 ns 116 ns 10 -lstringa<16> copy{str_with_len_N};/4096_stddev 5.46 ns 5.46 ns 10 -lstringa<16> copy{str_with_len_N};/4096_cv 4.71 % 4.71 % 10 -lstringa<512> copy{str_with_len_N};/15_mean 4.99 ns 4.99 ns 10 -lstringa<512> copy{str_with_len_N};/15_median 4.86 ns 4.86 ns 10 -lstringa<512> copy{str_with_len_N};/15_stddev 0.351 ns 0.351 ns 10 -lstringa<512> copy{str_with_len_N};/15_cv 7.03 % 7.03 % 10 -lstringa<512> copy{str_with_len_N};/16_mean 4.89 ns 4.89 ns 10 -lstringa<512> copy{str_with_len_N};/16_median 4.88 ns 4.88 ns 10 -lstringa<512> copy{str_with_len_N};/16_stddev 0.134 ns 0.134 ns 10 -lstringa<512> copy{str_with_len_N};/16_cv 2.73 % 2.73 % 10 -lstringa<512> copy{str_with_len_N};/23_mean 4.89 ns 4.89 ns 10 -lstringa<512> copy{str_with_len_N};/23_median 4.83 ns 4.83 ns 10 -lstringa<512> copy{str_with_len_N};/23_stddev 0.137 ns 0.137 ns 10 -lstringa<512> copy{str_with_len_N};/23_cv 2.80 % 2.80 % 10 -lstringa<512> copy{str_with_len_N};/24_mean 4.85 ns 4.85 ns 10 -lstringa<512> copy{str_with_len_N};/24_median 4.82 ns 4.82 ns 10 -lstringa<512> copy{str_with_len_N};/24_stddev 0.094 ns 0.094 ns 10 -lstringa<512> copy{str_with_len_N};/24_cv 1.94 % 1.94 % 10 -lstringa<512> copy{str_with_len_N};/32_mean 4.52 ns 4.52 ns 10 -lstringa<512> copy{str_with_len_N};/32_median 4.49 ns 4.49 ns 10 -lstringa<512> copy{str_with_len_N};/32_stddev 0.099 ns 0.099 ns 10 -lstringa<512> copy{str_with_len_N};/32_cv 2.20 % 2.20 % 10 -lstringa<512> copy{str_with_len_N};/64_mean 6.15 ns 6.15 ns 10 -lstringa<512> copy{str_with_len_N};/64_median 6.08 ns 6.08 ns 10 -lstringa<512> copy{str_with_len_N};/64_stddev 0.283 ns 0.283 ns 10 -lstringa<512> copy{str_with_len_N};/64_cv 4.61 % 4.61 % 10 -lstringa<512> copy{str_with_len_N};/128_mean 6.59 ns 6.59 ns 10 -lstringa<512> copy{str_with_len_N};/128_median 6.49 ns 6.49 ns 10 -lstringa<512> copy{str_with_len_N};/128_stddev 0.309 ns 0.309 ns 10 -lstringa<512> copy{str_with_len_N};/128_cv 4.69 % 4.69 % 10 -lstringa<512> copy{str_with_len_N};/256_mean 8.29 ns 8.29 ns 10 -lstringa<512> copy{str_with_len_N};/256_median 8.28 ns 8.28 ns 10 -lstringa<512> copy{str_with_len_N};/256_stddev 0.145 ns 0.145 ns 10 -lstringa<512> copy{str_with_len_N};/256_cv 1.75 % 1.75 % 10 +lstringa<16> copy{str_with_len_N};/64_median 25.6 ns 25.6 ns 10 +lstringa<16> copy{str_with_len_N};/64_stddev 0.706 ns 0.706 ns 10 +lstringa<16> copy{str_with_len_N};/64_cv 2.73 % 2.73 % 10 +lstringa<16> copy{str_with_len_N};/128_mean 26.5 ns 26.5 ns 10 +lstringa<16> copy{str_with_len_N};/128_median 26.2 ns 26.2 ns 10 +lstringa<16> copy{str_with_len_N};/128_stddev 1.21 ns 1.21 ns 10 +lstringa<16> copy{str_with_len_N};/128_cv 4.56 % 4.56 % 10 +lstringa<16> copy{str_with_len_N};/256_mean 29.6 ns 29.6 ns 10 +lstringa<16> copy{str_with_len_N};/256_median 28.5 ns 28.5 ns 10 +lstringa<16> copy{str_with_len_N};/256_stddev 2.76 ns 2.76 ns 10 +lstringa<16> copy{str_with_len_N};/256_cv 9.32 % 9.32 % 10 +lstringa<16> copy{str_with_len_N};/512_mean 30.9 ns 30.9 ns 10 +lstringa<16> copy{str_with_len_N};/512_median 30.5 ns 30.5 ns 10 +lstringa<16> copy{str_with_len_N};/512_stddev 1.06 ns 1.06 ns 10 +lstringa<16> copy{str_with_len_N};/512_cv 3.42 % 3.42 % 10 +lstringa<16> copy{str_with_len_N};/1024_mean 71.7 ns 71.7 ns 10 +lstringa<16> copy{str_with_len_N};/1024_median 69.8 ns 69.8 ns 10 +lstringa<16> copy{str_with_len_N};/1024_stddev 16.9 ns 16.9 ns 10 +lstringa<16> copy{str_with_len_N};/1024_cv 23.58 % 23.58 % 10 +lstringa<16> copy{str_with_len_N};/2048_mean 74.3 ns 74.3 ns 10 +lstringa<16> copy{str_with_len_N};/2048_median 76.4 ns 76.4 ns 10 +lstringa<16> copy{str_with_len_N};/2048_stddev 9.26 ns 9.26 ns 10 +lstringa<16> copy{str_with_len_N};/2048_cv 12.45 % 12.45 % 10 +lstringa<16> copy{str_with_len_N};/4096_mean 93.3 ns 93.3 ns 10 +lstringa<16> copy{str_with_len_N};/4096_median 91.2 ns 91.2 ns 10 +lstringa<16> copy{str_with_len_N};/4096_stddev 6.20 ns 6.20 ns 10 +lstringa<16> copy{str_with_len_N};/4096_cv 6.65 % 6.65 % 10 +lstringa<512> copy{str_with_len_N};/15_mean 4.93 ns 4.93 ns 10 +lstringa<512> copy{str_with_len_N};/15_median 4.96 ns 4.96 ns 10 +lstringa<512> copy{str_with_len_N};/15_stddev 0.123 ns 0.123 ns 10 +lstringa<512> copy{str_with_len_N};/15_cv 2.50 % 2.50 % 10 +lstringa<512> copy{str_with_len_N};/16_mean 4.97 ns 4.97 ns 10 +lstringa<512> copy{str_with_len_N};/16_median 4.93 ns 4.93 ns 10 +lstringa<512> copy{str_with_len_N};/16_stddev 0.183 ns 0.183 ns 10 +lstringa<512> copy{str_with_len_N};/16_cv 3.68 % 3.68 % 10 +lstringa<512> copy{str_with_len_N};/23_mean 4.94 ns 4.94 ns 10 +lstringa<512> copy{str_with_len_N};/23_median 4.90 ns 4.90 ns 10 +lstringa<512> copy{str_with_len_N};/23_stddev 0.160 ns 0.160 ns 10 +lstringa<512> copy{str_with_len_N};/23_cv 3.23 % 3.23 % 10 +lstringa<512> copy{str_with_len_N};/24_mean 4.90 ns 4.90 ns 10 +lstringa<512> copy{str_with_len_N};/24_median 4.89 ns 4.89 ns 10 +lstringa<512> copy{str_with_len_N};/24_stddev 0.069 ns 0.069 ns 10 +lstringa<512> copy{str_with_len_N};/24_cv 1.40 % 1.40 % 10 +lstringa<512> copy{str_with_len_N};/32_mean 5.03 ns 5.03 ns 10 +lstringa<512> copy{str_with_len_N};/32_median 4.97 ns 4.97 ns 10 +lstringa<512> copy{str_with_len_N};/32_stddev 0.452 ns 0.452 ns 10 +lstringa<512> copy{str_with_len_N};/32_cv 8.99 % 8.99 % 10 +lstringa<512> copy{str_with_len_N};/64_mean 6.12 ns 6.12 ns 10 +lstringa<512> copy{str_with_len_N};/64_median 6.06 ns 6.06 ns 10 +lstringa<512> copy{str_with_len_N};/64_stddev 0.221 ns 0.221 ns 10 +lstringa<512> copy{str_with_len_N};/64_cv 3.61 % 3.61 % 10 +lstringa<512> copy{str_with_len_N};/128_mean 7.87 ns 7.87 ns 10 +lstringa<512> copy{str_with_len_N};/128_median 7.80 ns 7.80 ns 10 +lstringa<512> copy{str_with_len_N};/128_stddev 0.269 ns 0.269 ns 10 +lstringa<512> copy{str_with_len_N};/128_cv 3.42 % 3.42 % 10 +lstringa<512> copy{str_with_len_N};/256_mean 8.70 ns 8.70 ns 10 +lstringa<512> copy{str_with_len_N};/256_median 8.80 ns 8.80 ns 10 +lstringa<512> copy{str_with_len_N};/256_stddev 0.343 ns 0.343 ns 10 +lstringa<512> copy{str_with_len_N};/256_cv 3.94 % 3.94 % 10 lstringa<512> copy{str_with_len_N};/512_mean 10.6 ns 10.6 ns 10 lstringa<512> copy{str_with_len_N};/512_median 10.6 ns 10.6 ns 10 -lstringa<512> copy{str_with_len_N};/512_stddev 0.196 ns 0.196 ns 10 -lstringa<512> copy{str_with_len_N};/512_cv 1.84 % 1.84 % 10 -lstringa<512> copy{str_with_len_N};/1024_mean 89.0 ns 89.0 ns 10 -lstringa<512> copy{str_with_len_N};/1024_median 89.5 ns 89.5 ns 10 -lstringa<512> copy{str_with_len_N};/1024_stddev 4.99 ns 4.99 ns 10 -lstringa<512> copy{str_with_len_N};/1024_cv 5.60 % 5.60 % 10 -lstringa<512> copy{str_with_len_N};/2048_mean 101 ns 101 ns 10 -lstringa<512> copy{str_with_len_N};/2048_median 99.8 ns 99.8 ns 10 -lstringa<512> copy{str_with_len_N};/2048_stddev 7.23 ns 7.23 ns 10 -lstringa<512> copy{str_with_len_N};/2048_cv 7.15 % 7.15 % 10 -lstringa<512> copy{str_with_len_N};/4096_mean 115 ns 115 ns 10 -lstringa<512> copy{str_with_len_N};/4096_median 114 ns 114 ns 10 -lstringa<512> copy{str_with_len_N};/4096_stddev 4.47 ns 4.47 ns 10 -lstringa<512> copy{str_with_len_N};/4096_cv 3.89 % 3.89 % 10 ------ Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 27.3 ns 27.3 ns 10 +lstringa<512> copy{str_with_len_N};/512_stddev 0.291 ns 0.291 ns 10 +lstringa<512> copy{str_with_len_N};/512_cv 2.75 % 2.75 % 10 +lstringa<512> copy{str_with_len_N};/1024_mean 71.4 ns 71.4 ns 10 +lstringa<512> copy{str_with_len_N};/1024_median 71.5 ns 71.5 ns 10 +lstringa<512> copy{str_with_len_N};/1024_stddev 17.3 ns 17.3 ns 10 +lstringa<512> copy{str_with_len_N};/1024_cv 24.23 % 24.23 % 10 +lstringa<512> copy{str_with_len_N};/2048_mean 77.5 ns 77.5 ns 10 +lstringa<512> copy{str_with_len_N};/2048_median 75.1 ns 75.1 ns 10 +lstringa<512> copy{str_with_len_N};/2048_stddev 10.9 ns 10.9 ns 10 +lstringa<512> copy{str_with_len_N};/2048_cv 14.01 % 14.01 % 10 +lstringa<512> copy{str_with_len_N};/4096_mean 93.4 ns 93.4 ns 10 +lstringa<512> copy{str_with_len_N};/4096_median 90.8 ns 90.8 ns 10 +lstringa<512> copy{str_with_len_N};/4096_stddev 11.0 ns 11.0 ns 10 +lstringa<512> copy{str_with_len_N};/4096_cv 11.77 % 11.77 % 10 +----- Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 27.0 ns 27.0 ns 10 std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 26.8 ns 26.8 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 1.08 ns 1.08 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 3.97 % 3.97 % 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 12.4 ns 12.4 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 0.637 ns 0.637 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 2.36 % 2.36 % 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 12.3 ns 12.3 ns 10 std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 12.3 ns 12.3 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.287 ns 0.287 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 2.32 % 2.32 % 10 -stringa s = "123456789"; int res = s.to_int_mean 7.92 ns 7.92 ns 10 -stringa s = "123456789"; int res = s.to_int_median 7.90 ns 7.90 ns 10 -stringa s = "123456789"; int res = s.to_int_stddev 0.170 ns 0.170 ns 10 -stringa s = "123456789"; int res = s.to_int_cv 2.15 % 2.15 % 10 -ssa s = "123456789"; int res = s.to_int_mean 7.73 ns 7.73 ns 10 -ssa s = "123456789"; int res = s.to_int_median 7.70 ns 7.70 ns 10 -ssa s = "123456789"; int res = s.to_int_stddev 0.126 ns 0.126 ns 10 -ssa s = "123456789"; int res = s.to_int_cv 1.63 % 1.63 % 10 -lstringa<20> s = "123456789"; int res = s.to_int_mean 7.73 ns 7.73 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_median 7.60 ns 7.60 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.343 ns 0.343 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_cv 4.43 % 4.43 % 10 ------ Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 24.0 ns 24.0 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 23.9 ns 23.9 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 0.391 ns 0.391 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 1.63 % 1.63 % 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 14.8 ns 14.8 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 14.7 ns 14.7 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.433 ns 0.433 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 2.93 % 2.93 % 10 -stringa s = "abcDef"; int res = s.to_int_mean 7.55 ns 7.55 ns 10 -stringa s = "abcDef"; int res = s.to_int_median 7.48 ns 7.48 ns 10 -stringa s = "abcDef"; int res = s.to_int_stddev 0.242 ns 0.242 ns 10 -stringa s = "abcDef"; int res = s.to_int_cv 3.20 % 3.20 % 10 -ssa s = "abcDef"; int res = s.to_int_mean 8.28 ns 8.28 ns 10 -ssa s = "abcDef"; int res = s.to_int_median 8.20 ns 8.20 ns 10 -ssa s = "abcDef"; int res = s.to_int_stddev 0.205 ns 0.205 ns 10 -ssa s = "abcDef"; int res = s.to_int_cv 2.48 % 2.48 % 10 -lstringa<20> s = "abcDef"; int res = s.to_int_mean 8.16 ns 8.16 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_median 8.11 ns 8.11 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.113 ns 0.113 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_cv 1.39 % 1.39 % 10 ------ Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 29.1 ns 29.1 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 29.6 ns 29.6 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 0.966 ns 0.966 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 3.32 % 3.32 % 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 16.7 ns 16.7 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 16.8 ns 16.8 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 0.714 ns 0.714 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 4.27 % 4.27 % 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 14.6 ns 14.6 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 14.6 ns 14.6 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.378 ns 0.378 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 2.59 % 2.59 % 10 --- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << "abbaabbaabbaabba";_mean 1439 ns 1439 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_median 1423 ns 1423 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 55.7 ns 55.7 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_cv 3.87 % 3.87 % 10 -std::string str; ... str += "abbaabbaabbaabba";_mean 369 ns 369 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_median 366 ns 366 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_stddev 13.1 ns 13.1 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_cv 3.56 % 3.56 % 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 372 ns 372 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_median 366 ns 366 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 17.5 ns 17.5 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 4.69 % 4.69 % 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 258 ns 258 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_median 255 ns 255 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 10.4 ns 10.4 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 4.02 % 4.02 % 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 241 ns 241 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_median 237 ns 237 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 9.51 ns 9.51 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 3.96 % 3.96 % 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 140 ns 140 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 139 ns 139 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 1.89 ns 1.89 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 1.35 % 1.35 % 10 --- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 1399 ns 1399 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 1392 ns 1392 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 21.4 ns 21.4 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 1.53 % 1.53 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 1343 ns 1343 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_median 1335 ns 1335 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 29.7 ns 29.7 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 2.22 % 2.22 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 429 ns 429 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 425 ns 425 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 11.9 ns 11.9 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.78 % 2.78 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 361 ns 361 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 362 ns 362 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 11.1 ns 11.1 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.07 % 3.07 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 316 ns 316 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 316 ns 316 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 10.4 ns 10.4 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.28 % 3.28 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 256 ns 256 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 254 ns 254 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 7.09 ns 7.09 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.77 % 2.77 % 10 --- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 74700 ns 74701 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 74616 ns 74616 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 1876 ns 1876 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 2.51 % 2.51 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 72474 ns 72474 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 71002 ns 71002 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 3104 ns 3104 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 4.28 % 4.28 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 19642 ns 19642 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 19294 ns 19294 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 924 ns 924 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 4.70 % 4.70 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 17774 ns 17774 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 17626 ns 17626 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 440 ns 440 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.48 % 2.48 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 17565 ns 17565 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 17594 ns 17594 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 482 ns 482 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.75 % 2.75 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 18274 ns 18274 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 18226 ns 18226 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 365 ns 365 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.00 % 2.00 % 10 --- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var1 << str_var2;_mean 1400 ns 1400 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_median 1371 ns 1371 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_stddev 59.5 ns 59.5 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_cv 4.25 % 4.25 % 10 -std::string str; ... str += str_var1 + str_var2;_mean 1342 ns 1342 ns 10 -std::string str; ... str += str_var1 + str_var2;_median 1329 ns 1329 ns 10 -std::string str; ... str += str_var1 + str_var2;_stddev 40.1 ns 40.1 ns 10 -std::string str; ... str += str_var1 + str_var2;_cv 2.99 % 2.99 % 10 -lstringa<16> str; ... str += str_var1 + str_var2;_mean 598 ns 598 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_median 591 ns 591 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_stddev 32.2 ns 32.2 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_cv 5.39 % 5.39 % 10 -lstringa<128> str; ... str += str_var1 + str_var2;_mean 500 ns 500 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_median 496 ns 496 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_stddev 13.1 ns 13.1 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_cv 2.61 % 2.61 % 10 -lstringa<512> str; ... str += str_var1 + str_var2;_mean 462 ns 462 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_median 462 ns 462 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_stddev 20.4 ns 20.4 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_cv 4.42 % 4.42 % 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_mean 431 ns 431 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_median 440 ns 440 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 31.5 ns 31.5 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_cv 7.31 % 7.31 % 10 --- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; str << "test = " << k << " times";_mean 3419 ns 3419 ns 10 -std::stringstream str; str << "test = " << k << " times";_median 3299 ns 3299 ns 10 -std::stringstream str; str << "test = " << k << " times";_stddev 235 ns 235 ns 10 -std::stringstream str; str << "test = " << k << " times";_cv 6.87 % 6.87 % 10 -std::string str = "test = " + std::to_string(k) + " times";_mean 451 ns 451 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_median 451 ns 451 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_stddev 4.99 ns 4.99 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_cv 1.11 % 1.11 % 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 1509 ns 1509 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 1515 ns 1515 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 26.5 ns 26.5 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 1.75 % 1.75 % 10 -std::string str = std::format("test = {} times", k);_mean 1286 ns 1286 ns 10 -std::string str = std::format("test = {} times", k);_median 1278 ns 1278 ns 10 -std::string str = std::format("test = {} times", k);_stddev 30.8 ns 30.8 ns 10 -std::string str = std::format("test = {} times", k);_cv 2.40 % 2.40 % 10 -lstringa<8> str; str.format("test = {} times", k);_mean 1618 ns 1618 ns 10 -lstringa<8> str; str.format("test = {} times", k);_median 1609 ns 1609 ns 10 -lstringa<8> str; str.format("test = {} times", k);_stddev 21.9 ns 21.9 ns 10 -lstringa<8> str; str.format("test = {} times", k);_cv 1.35 % 1.35 % 10 -lstringa<32> str; str.format("test = {} times", k);_mean 1132 ns 1132 ns 10 -lstringa<32> str; str.format("test = {} times", k);_median 1127 ns 1127 ns 10 -lstringa<32> str; str.format("test = {} times", k);_stddev 33.3 ns 33.3 ns 10 -lstringa<32> str; str.format("test = {} times", k);_cv 2.94 % 2.94 % 10 -lstringa<8> str = "test = " + k + " times";_mean 316 ns 316 ns 10 -lstringa<8> str = "test = " + k + " times";_median 316 ns 316 ns 10 -lstringa<8> str = "test = " + k + " times";_stddev 4.81 ns 4.81 ns 10 -lstringa<8> str = "test = " + k + " times";_cv 1.52 % 1.52 % 10 -lstringa<32> str = "test = " + k + " times";_mean 162 ns 162 ns 10 -lstringa<32> str = "test = " + k + " times";_median 160 ns 160 ns 10 -lstringa<32> str = "test = " + k + " times";_stddev 6.29 ns 6.29 ns 10 -lstringa<32> str = "test = " + k + " times";_cv 3.88 % 3.88 % 10 -stringa str = "test = " + k + " times";_mean 174 ns 174 ns 10 -stringa str = "test = " + k + " times";_median 173 ns 173 ns 10 -stringa str = "test = " + k + " times";_stddev 3.60 ns 3.60 ns 10 -stringa str = "test = " + k + " times";_cv 2.07 % 2.07 % 10 --- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find + substr + std::strtol_mean 285 ns 285 ns 10 -std::string::find + substr + std::strtol_median 282 ns 282 ns 10 -std::string::find + substr + std::strtol_stddev 11.1 ns 11.1 ns 10 -std::string::find + substr + std::strtol_cv 3.90 % 3.90 % 10 -ssa::splitter + ssa::as_int_mean 139 ns 139 ns 10 -ssa::splitter + ssa::as_int_median 139 ns 139 ns 10 -ssa::splitter + ssa::as_int_stddev 1.89 ns 1.89 ns 10 -ssa::splitter + ssa::as_int_cv 1.36 % 1.37 % 10 -ssa::splitf + functor_mean 153 ns 153 ns 10 -ssa::splitf + functor_median 152 ns 152 ns 10 -ssa::splitf + functor_stddev 1.34 ns 1.34 ns 10 -ssa::splitf + functor_cv 0.88 % 0.88 % 10 --- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Naive (and wrong) replace symbols with std::string find + replace_mean 867 ns 867 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_median 866 ns 866 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_stddev 9.68 ns 9.68 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_cv 1.12 % 1.12 % 10 -replace symbols with std::string find_first_of + replace_mean 2597 ns 2597 ns 10 -replace symbols with std::string find_first_of + replace_median 2577 ns 2577 ns 10 -replace symbols with std::string find_first_of + replace_stddev 74.4 ns 74.4 ns 10 -replace symbols with std::string find_first_of + replace_cv 2.86 % 2.86 % 10 -replace symbols with std::string_view find_first_of + copy_mean 2671 ns 2671 ns 10 -replace symbols with std::string_view find_first_of + copy_median 2667 ns 2667 ns 10 -replace symbols with std::string_view find_first_of + copy_stddev 54.9 ns 54.9 ns 10 -replace symbols with std::string_view find_first_of + copy_cv 2.05 % 2.05 % 10 -replace runtime symbols with string expressions and without remembering all search results_mean 1543 ns 1543 ns 10 -replace runtime symbols with string expressions and without remembering all search results_median 1549 ns 1549 ns 10 -replace runtime symbols with string expressions and without remembering all search results_stddev 22.7 ns 22.7 ns 10 -replace runtime symbols with string expressions and without remembering all search results_cv 1.47 % 1.47 % 10 -replace runtime symbols with simstr and memorization of all search results_mean 1181 ns 1181 ns 10 -replace runtime symbols with simstr and memorization of all search results_median 1178 ns 1178 ns 10 -replace runtime symbols with simstr and memorization of all search results_stddev 42.8 ns 42.8 ns 10 -replace runtime symbols with simstr and memorization of all search results_cv 3.63 % 3.62 % 10 -replace const symbols with string expressions and without remembering all search results_mean 1265 ns 1265 ns 10 -replace const symbols with string expressions and without remembering all search results_median 1255 ns 1255 ns 10 -replace const symbols with string expressions and without remembering all search results_stddev 18.4 ns 18.4 ns 10 -replace const symbols with string expressions and without remembering all search results_cv 1.45 % 1.45 % 10 -replace const symbols with string expressions and memorization of all search results_mean 866 ns 866 ns 10 -replace const symbols with string expressions and memorization of all search results_median 858 ns 858 ns 10 -replace const symbols with string expressions and memorization of all search results_stddev 16.6 ns 16.6 ns 10 -replace const symbols with string expressions and memorization of all search results_cv 1.91 % 1.91 % 10 --- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Short Naive (and wrong) replace symbols with std::string find + replace_mean 170 ns 170 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_median 165 ns 165 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_stddev 13.1 ns 13.1 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_cv 7.73 % 7.73 % 10 -Short replace symbols with std::string find_first_of + replace_mean 348 ns 348 ns 10 -Short replace symbols with std::string find_first_of + replace_median 332 ns 332 ns 10 -Short replace symbols with std::string find_first_of + replace_stddev 35.6 ns 35.6 ns 10 -Short replace symbols with std::string find_first_of + replace_cv 10.24 % 10.24 % 10 -Short replace symbols with std::string_view find_first_of + copy_mean 322 ns 322 ns 10 -Short replace symbols with std::string_view find_first_of + copy_median 321 ns 321 ns 10 -Short replace symbols with std::string_view find_first_of + copy_stddev 6.90 ns 6.90 ns 10 -Short replace symbols with std::string_view find_first_of + copy_cv 2.14 % 2.14 % 10 -Short replace runtime symbols with string expressions and without remembering all search results_mean 198 ns 198 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_median 198 ns 198 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_stddev 3.57 ns 3.57 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_cv 1.81 % 1.81 % 10 -Short replace runtime symbols with simstr and memorization of all search results_mean 192 ns 192 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_median 192 ns 192 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_stddev 4.04 ns 4.04 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_cv 2.10 % 2.10 % 10 -Short replace const symbols with string expressions and without remembering all search results_mean 165 ns 165 ns 10 -Short replace const symbols with string expressions and without remembering all search results_median 165 ns 165 ns 10 -Short replace const symbols with string expressions and without remembering all search results_stddev 3.56 ns 3.56 ns 10 -Short replace const symbols with string expressions and without remembering all search results_cv 2.17 % 2.17 % 10 -Short replace const symbols with string expressions and memorization of all search results_mean 153 ns 153 ns 10 -Short replace const symbols with string expressions and memorization of all search results_median 153 ns 153 ns 10 -Short replace const symbols with string expressions and memorization of all search results_stddev 2.48 ns 2.48 ns 10 -Short replace const symbols with string expressions and memorization of all search results_cv 1.62 % 1.62 % 10 ------ Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to ---- in std::string|64_mean 162 ns 162 ns 10 -replace bb to ---- in std::string|64_median 163 ns 163 ns 10 -replace bb to ---- in std::string|64_stddev 4.04 ns 4.04 ns 10 -replace bb to ---- in std::string|64_cv 2.49 % 2.49 % 10 -replace bb to ---- in std::string|256_mean 493 ns 493 ns 10 -replace bb to ---- in std::string|256_median 493 ns 493 ns 10 -replace bb to ---- in std::string|256_stddev 8.37 ns 8.37 ns 10 -replace bb to ---- in std::string|256_cv 1.70 % 1.70 % 10 -replace bb to ---- in std::string|512_mean 993 ns 993 ns 10 -replace bb to ---- in std::string|512_median 994 ns 994 ns 10 -replace bb to ---- in std::string|512_stddev 14.5 ns 14.5 ns 10 -replace bb to ---- in std::string|512_cv 1.46 % 1.46 % 10 -replace bb to ---- in std::string|1024_mean 2333 ns 2333 ns 10 -replace bb to ---- in std::string|1024_median 2320 ns 2320 ns 10 -replace bb to ---- in std::string|1024_stddev 65.6 ns 65.6 ns 10 -replace bb to ---- in std::string|1024_cv 2.81 % 2.81 % 10 -replace bb to ---- in std::string|2048_mean 6359 ns 6359 ns 10 -replace bb to ---- in std::string|2048_median 6499 ns 6499 ns 10 -replace bb to ---- in std::string|2048_stddev 455 ns 455 ns 10 -replace bb to ---- in std::string|2048_cv 7.16 % 7.16 % 10 -replace bb to ---- in lstringa<8>|64_mean 167 ns 167 ns 10 -replace bb to ---- in lstringa<8>|64_median 167 ns 167 ns 10 -replace bb to ---- in lstringa<8>|64_stddev 3.62 ns 3.62 ns 10 -replace bb to ---- in lstringa<8>|64_cv 2.17 % 2.17 % 10 -replace bb to ---- in lstringa<8>|256_mean 495 ns 495 ns 10 -replace bb to ---- in lstringa<8>|256_median 492 ns 492 ns 10 -replace bb to ---- in lstringa<8>|256_stddev 10.9 ns 10.9 ns 10 -replace bb to ---- in lstringa<8>|256_cv 2.20 % 2.20 % 10 -replace bb to ---- in lstringa<8>|512_mean 922 ns 922 ns 10 -replace bb to ---- in lstringa<8>|512_median 922 ns 922 ns 10 -replace bb to ---- in lstringa<8>|512_stddev 23.3 ns 23.3 ns 10 -replace bb to ---- in lstringa<8>|512_cv 2.53 % 2.53 % 10 -replace bb to ---- in lstringa<8>|1024_mean 1862 ns 1862 ns 10 -replace bb to ---- in lstringa<8>|1024_median 1861 ns 1861 ns 10 -replace bb to ---- in lstringa<8>|1024_stddev 30.7 ns 30.7 ns 10 -replace bb to ---- in lstringa<8>|1024_cv 1.65 % 1.65 % 10 -replace bb to ---- in lstringa<8>|2048_mean 3551 ns 3551 ns 10 -replace bb to ---- in lstringa<8>|2048_median 3539 ns 3539 ns 10 -replace bb to ---- in lstringa<8>|2048_stddev 62.8 ns 62.8 ns 10 -replace bb to ---- in lstringa<8>|2048_cv 1.77 % 1.77 % 10 -replace bb to ---- by init stringa|64_mean 121 ns 121 ns 10 -replace bb to ---- by init stringa|64_median 122 ns 122 ns 10 -replace bb to ---- by init stringa|64_stddev 2.81 ns 2.81 ns 10 -replace bb to ---- by init stringa|64_cv 2.31 % 2.31 % 10 -replace bb to ---- by init stringa|256_mean 444 ns 444 ns 10 -replace bb to ---- by init stringa|256_median 444 ns 444 ns 10 -replace bb to ---- by init stringa|256_stddev 6.27 ns 6.27 ns 10 -replace bb to ---- by init stringa|256_cv 1.41 % 1.41 % 10 -replace bb to ---- by init stringa|512_mean 827 ns 827 ns 10 -replace bb to ---- by init stringa|512_median 825 ns 825 ns 10 -replace bb to ---- by init stringa|512_stddev 15.8 ns 15.8 ns 10 -replace bb to ---- by init stringa|512_cv 1.91 % 1.91 % 10 -replace bb to ---- by init stringa|1024_mean 1637 ns 1637 ns 10 -replace bb to ---- by init stringa|1024_median 1635 ns 1635 ns 10 -replace bb to ---- by init stringa|1024_stddev 22.9 ns 22.9 ns 10 -replace bb to ---- by init stringa|1024_cv 1.40 % 1.40 % 10 -replace bb to ---- by init stringa|2048_mean 3280 ns 3280 ns 10 -replace bb to ---- by init stringa|2048_median 3267 ns 3267 ns 10 -replace bb to ---- by init stringa|2048_stddev 71.3 ns 71.3 ns 10 -replace bb to ---- by init stringa|2048_cv 2.17 % 2.17 % 10 ------ Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to -- in std::string|64_mean 125 ns 125 ns 10 -replace bb to -- in std::string|64_median 125 ns 125 ns 10 -replace bb to -- in std::string|64_stddev 2.16 ns 2.16 ns 10 -replace bb to -- in std::string|64_cv 1.73 % 1.73 % 10 -replace bb to -- in std::string|256_mean 405 ns 405 ns 10 -replace bb to -- in std::string|256_median 402 ns 402 ns 10 -replace bb to -- in std::string|256_stddev 8.63 ns 8.63 ns 10 -replace bb to -- in std::string|256_cv 2.13 % 2.13 % 10 -replace bb to -- in std::string|512_mean 780 ns 780 ns 10 -replace bb to -- in std::string|512_median 777 ns 777 ns 10 -replace bb to -- in std::string|512_stddev 13.5 ns 13.5 ns 10 -replace bb to -- in std::string|512_cv 1.73 % 1.73 % 10 -replace bb to -- in std::string|1024_mean 1446 ns 1446 ns 10 -replace bb to -- in std::string|1024_median 1452 ns 1452 ns 10 -replace bb to -- in std::string|1024_stddev 23.9 ns 23.9 ns 10 -replace bb to -- in std::string|1024_cv 1.65 % 1.65 % 10 -replace bb to -- in std::string|2048_mean 3138 ns 3138 ns 10 -replace bb to -- in std::string|2048_median 3133 ns 3133 ns 10 -replace bb to -- in std::string|2048_stddev 68.1 ns 68.1 ns 10 -replace bb to -- in std::string|2048_cv 2.17 % 2.17 % 10 -replace bb to -- in lstringa<8>|64_mean 103 ns 103 ns 10 -replace bb to -- in lstringa<8>|64_median 103 ns 103 ns 10 -replace bb to -- in lstringa<8>|64_stddev 3.47 ns 3.47 ns 10 -replace bb to -- in lstringa<8>|64_cv 3.35 % 3.35 % 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.086 ns 0.086 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 0.70 % 0.70 % 10 +stringa s = "123456789"; int res = s.to_int_mean 8.38 ns 8.38 ns 10 +stringa s = "123456789"; int res = s.to_int_median 8.33 ns 8.33 ns 10 +stringa s = "123456789"; int res = s.to_int_stddev 0.220 ns 0.220 ns 10 +stringa s = "123456789"; int res = s.to_int_cv 2.62 % 2.62 % 10 +ssa s = "123456789"; int res = s.to_int_mean 8.48 ns 8.48 ns 10 +ssa s = "123456789"; int res = s.to_int_median 8.36 ns 8.36 ns 10 +ssa s = "123456789"; int res = s.to_int_stddev 0.427 ns 0.427 ns 10 +ssa s = "123456789"; int res = s.to_int_cv 5.03 % 5.03 % 10 +lstringa<20> s = "123456789"; int res = s.to_int_mean 8.36 ns 8.36 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_median 8.29 ns 8.29 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.338 ns 0.338 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_cv 4.04 % 4.04 % 10 +----- Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 24.3 ns 24.3 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 23.7 ns 23.7 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 1.18 ns 1.18 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 4.86 % 4.86 % 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 15.0 ns 15.0 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 15.0 ns 15.0 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.265 ns 0.265 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 1.77 % 1.77 % 10 +stringa s = "abcDef"; int res = s.to_int_mean 8.57 ns 8.57 ns 10 +stringa s = "abcDef"; int res = s.to_int_median 8.53 ns 8.53 ns 10 +stringa s = "abcDef"; int res = s.to_int_stddev 0.154 ns 0.154 ns 10 +stringa s = "abcDef"; int res = s.to_int_cv 1.80 % 1.80 % 10 +ssa s = "abcDef"; int res = s.to_int_mean 7.90 ns 7.90 ns 10 +ssa s = "abcDef"; int res = s.to_int_median 7.88 ns 7.88 ns 10 +ssa s = "abcDef"; int res = s.to_int_stddev 0.135 ns 0.135 ns 10 +ssa s = "abcDef"; int res = s.to_int_cv 1.71 % 1.71 % 10 +lstringa<20> s = "abcDef"; int res = s.to_int_mean 7.94 ns 7.94 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_median 7.94 ns 7.94 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.121 ns 0.121 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_cv 1.52 % 1.52 % 10 +----- Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 28.7 ns 28.7 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 28.5 ns 28.5 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 1.26 ns 1.26 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 4.39 % 4.39 % 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 15.7 ns 15.7 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 15.4 ns 15.4 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 1.09 ns 1.09 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 6.91 % 6.91 % 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 10.9 ns 10.9 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 10.9 ns 10.9 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.309 ns 0.309 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 2.83 % 2.83 % 10 +----- Convert to double '1234.567e10' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_mean 65.0 ns 65.0 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_median 64.8 ns 64.8 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_stddev 2.42 ns 2.42 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_cv 3.72 % 3.72 % 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_mean 23.9 ns 23.9 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_median 24.0 ns 24.0 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_stddev 0.476 ns 0.476 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_cv 1.99 % 1.99 % 10 +ssa s = "1234.567e10"; double res = *s.to_double()_mean 24.3 ns 24.3 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_median 24.4 ns 24.4 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_stddev 0.473 ns 0.458 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_cv 1.94 % 1.88 % 10 +-- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << "abbaabbaabbaabba";_mean 1513 ns 1513 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_median 1490 ns 1490 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 105 ns 105 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_cv 6.95 % 6.95 % 10 +std::string str; ... str += "abbaabbaabbaabba";_mean 346 ns 346 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_median 343 ns 343 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_stddev 20.3 ns 20.3 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_cv 5.86 % 5.86 % 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 371 ns 371 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_median 367 ns 367 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 25.3 ns 25.3 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 6.82 % 6.82 % 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 264 ns 264 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_median 261 ns 261 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 17.6 ns 17.6 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 6.67 % 6.67 % 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 239 ns 239 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_median 239 ns 239 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 14.3 ns 14.3 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 5.96 % 5.96 % 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 141 ns 141 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 140 ns 140 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 2.88 ns 2.88 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 2.04 % 2.04 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 1456 ns 1456 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 1460 ns 1460 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 25.6 ns 25.6 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 1.76 % 1.76 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 1276 ns 1276 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_median 1277 ns 1277 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 23.7 ns 23.7 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 1.86 % 1.86 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 420 ns 420 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 417 ns 417 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 18.9 ns 18.9 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 4.50 % 4.50 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 355 ns 355 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 354 ns 354 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 14.0 ns 14.0 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.94 % 3.94 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 310 ns 310 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 313 ns 313 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 12.0 ns 12.0 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.86 % 3.86 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 253 ns 253 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 249 ns 249 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 13.3 ns 13.3 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 5.27 % 5.27 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 132670 ns 132669 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 132572 ns 132570 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 3449 ns 3449 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 2.60 % 2.60 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 74369 ns 74369 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 74079 ns 74079 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 1365 ns 1365 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.84 % 1.84 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 55191 ns 55191 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 55808 ns 55808 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 2053 ns 2053 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.72 % 3.72 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 28835 ns 28835 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 29915 ns 29915 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 4393 ns 4393 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 15.23 % 15.23 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 19500 ns 19500 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 17304 ns 17304 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 4582 ns 4582 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 23.50 % 23.50 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 18108 ns 18108 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 17806 ns 17806 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 1267 ns 1267 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 7.00 % 7.00 % 10 +-- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var1 << str_var2;_mean 1425 ns 1425 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_median 1418 ns 1418 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_stddev 26.1 ns 26.1 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_cv 1.83 % 1.83 % 10 +std::string str; ... str += str_var1 + str_var2;_mean 1392 ns 1392 ns 10 +std::string str; ... str += str_var1 + str_var2;_median 1359 ns 1359 ns 10 +std::string str; ... str += str_var1 + str_var2;_stddev 80.1 ns 80.1 ns 10 +std::string str; ... str += str_var1 + str_var2;_cv 5.76 % 5.76 % 10 +lstringa<16> str; ... str += str_var1 + str_var2;_mean 630 ns 630 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_median 609 ns 609 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_stddev 57.4 ns 57.4 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_cv 9.11 % 9.11 % 10 +lstringa<128> str; ... str += str_var1 + str_var2;_mean 534 ns 534 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_median 534 ns 534 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_stddev 13.8 ns 13.8 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_cv 2.59 % 2.59 % 10 +lstringa<512> str; ... str += str_var1 + str_var2;_mean 470 ns 470 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_median 470 ns 470 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_stddev 8.82 ns 8.82 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_cv 1.88 % 1.88 % 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_mean 434 ns 434 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_median 434 ns 434 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 5.85 ns 5.85 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_cv 1.35 % 1.35 % 10 +-- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; str << "test = " << k << " times";_mean 3106 ns 3106 ns 10 +std::stringstream str; str << "test = " << k << " times";_median 3081 ns 3081 ns 10 +std::stringstream str; str << "test = " << k << " times";_stddev 58.7 ns 58.7 ns 10 +std::stringstream str; str << "test = " << k << " times";_cv 1.89 % 1.89 % 10 +std::string str = "test = " + std::to_string(k) + " times";_mean 448 ns 448 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_median 447 ns 447 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_stddev 8.40 ns 8.40 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_cv 1.87 % 1.87 % 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 1526 ns 1526 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 1523 ns 1523 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 37.9 ns 37.9 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 2.48 % 2.48 % 10 +std::string str = std::format("test = {} times", k);_mean 1271 ns 1271 ns 10 +std::string str = std::format("test = {} times", k);_median 1268 ns 1268 ns 10 +std::string str = std::format("test = {} times", k);_stddev 36.9 ns 36.9 ns 10 +std::string str = std::format("test = {} times", k);_cv 2.90 % 2.90 % 10 +lstringa<8> str; str.format("test = {} times", k);_mean 1674 ns 1674 ns 10 +lstringa<8> str; str.format("test = {} times", k);_median 1655 ns 1655 ns 10 +lstringa<8> str; str.format("test = {} times", k);_stddev 54.6 ns 54.6 ns 10 +lstringa<8> str; str.format("test = {} times", k);_cv 3.26 % 3.26 % 10 +lstringa<32> str; str.format("test = {} times", k);_mean 1138 ns 1138 ns 10 +lstringa<32> str; str.format("test = {} times", k);_median 1122 ns 1122 ns 10 +lstringa<32> str; str.format("test = {} times", k);_stddev 51.3 ns 51.3 ns 10 +lstringa<32> str; str.format("test = {} times", k);_cv 4.51 % 4.51 % 10 +lstringa<8> str = "test = " + k + " times";_mean 317 ns 317 ns 10 +lstringa<8> str = "test = " + k + " times";_median 315 ns 315 ns 10 +lstringa<8> str = "test = " + k + " times";_stddev 9.00 ns 9.00 ns 10 +lstringa<8> str = "test = " + k + " times";_cv 2.84 % 2.84 % 10 +lstringa<32> str = "test = " + k + " times";_mean 154 ns 154 ns 10 +lstringa<32> str = "test = " + k + " times";_median 154 ns 154 ns 10 +lstringa<32> str = "test = " + k + " times";_stddev 3.15 ns 3.15 ns 10 +lstringa<32> str = "test = " + k + " times";_cv 2.04 % 2.04 % 10 +stringa str = "test = " + k + " times";_mean 170 ns 170 ns 10 +stringa str = "test = " + k + " times";_median 168 ns 168 ns 10 +stringa str = "test = " + k + " times";_stddev 5.97 ns 5.97 ns 10 +stringa str = "test = " + k + " times";_cv 3.52 % 3.52 % 10 +-- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find + substr + std::strtol_mean 273 ns 273 ns 10 +std::string::find + substr + std::strtol_median 271 ns 271 ns 10 +std::string::find + substr + std::strtol_stddev 5.77 ns 5.77 ns 10 +std::string::find + substr + std::strtol_cv 2.12 % 2.12 % 10 +ssa::splitter + ssa::as_int_mean 137 ns 137 ns 10 +ssa::splitter + ssa::as_int_median 136 ns 136 ns 10 +ssa::splitter + ssa::as_int_stddev 3.41 ns 3.41 ns 10 +ssa::splitter + ssa::as_int_cv 2.49 % 2.49 % 10 +ssa::splitf + functor_mean 130 ns 130 ns 10 +ssa::splitf + functor_median 130 ns 130 ns 10 +ssa::splitf + functor_stddev 1.63 ns 1.63 ns 10 +ssa::splitf + functor_cv 1.26 % 1.26 % 10 +-- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Naive (and wrong) replace symbols with std::string find + replace_mean 851 ns 851 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_median 856 ns 856 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_stddev 18.6 ns 18.6 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_cv 2.19 % 2.19 % 10 +replace symbols with std::string find_first_of + replace_mean 2496 ns 2496 ns 10 +replace symbols with std::string find_first_of + replace_median 2428 ns 2428 ns 10 +replace symbols with std::string find_first_of + replace_stddev 225 ns 225 ns 10 +replace symbols with std::string find_first_of + replace_cv 9.03 % 9.03 % 10 +replace symbols with std::string_view find_first_of + copy_mean 973 ns 973 ns 10 +replace symbols with std::string_view find_first_of + copy_median 971 ns 971 ns 10 +replace symbols with std::string_view find_first_of + copy_stddev 18.8 ns 18.8 ns 10 +replace symbols with std::string_view find_first_of + copy_cv 1.93 % 1.93 % 10 +replace runtime symbols with string expressions and without remembering all search results_mean 1508 ns 1508 ns 10 +replace runtime symbols with string expressions and without remembering all search results_median 1511 ns 1511 ns 10 +replace runtime symbols with string expressions and without remembering all search results_stddev 24.9 ns 24.9 ns 10 +replace runtime symbols with string expressions and without remembering all search results_cv 1.65 % 1.65 % 10 +replace runtime symbols with simstr and memorization of all search results_mean 1172 ns 1172 ns 10 +replace runtime symbols with simstr and memorization of all search results_median 1177 ns 1177 ns 10 +replace runtime symbols with simstr and memorization of all search results_stddev 13.5 ns 13.5 ns 10 +replace runtime symbols with simstr and memorization of all search results_cv 1.15 % 1.15 % 10 +replace const symbols with string expressions and without remembering all search results_mean 1253 ns 1253 ns 10 +replace const symbols with string expressions and without remembering all search results_median 1254 ns 1254 ns 10 +replace const symbols with string expressions and without remembering all search results_stddev 19.3 ns 19.3 ns 10 +replace const symbols with string expressions and without remembering all search results_cv 1.54 % 1.54 % 10 +replace const symbols with string expressions and memorization of all search results_mean 874 ns 874 ns 10 +replace const symbols with string expressions and memorization of all search results_median 875 ns 875 ns 10 +replace const symbols with string expressions and memorization of all search results_stddev 23.8 ns 23.8 ns 10 +replace const symbols with string expressions and memorization of all search results_cv 2.73 % 2.73 % 10 +-- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Short Naive (and wrong) replace symbols with std::string find + replace_mean 161 ns 161 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_median 161 ns 161 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_stddev 3.28 ns 3.28 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_cv 2.04 % 2.04 % 10 +Short replace symbols with std::string find_first_of + replace_mean 321 ns 321 ns 10 +Short replace symbols with std::string find_first_of + replace_median 315 ns 315 ns 10 +Short replace symbols with std::string find_first_of + replace_stddev 12.9 ns 12.9 ns 10 +Short replace symbols with std::string find_first_of + replace_cv 4.02 % 4.02 % 10 +Short replace symbols with std::string_view find_first_of + copy_mean 155 ns 155 ns 10 +Short replace symbols with std::string_view find_first_of + copy_median 154 ns 154 ns 10 +Short replace symbols with std::string_view find_first_of + copy_stddev 4.84 ns 4.84 ns 10 +Short replace symbols with std::string_view find_first_of + copy_cv 3.13 % 3.13 % 10 +Short replace runtime symbols with string expressions and without remembering all search results_mean 192 ns 192 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_median 190 ns 190 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_stddev 7.47 ns 7.47 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_cv 3.89 % 3.89 % 10 +Short replace runtime symbols with simstr and memorization of all search results_mean 190 ns 190 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_median 189 ns 189 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_stddev 2.96 ns 2.96 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_cv 1.56 % 1.56 % 10 +Short replace const symbols with string expressions and without remembering all search results_mean 159 ns 159 ns 10 +Short replace const symbols with string expressions and without remembering all search results_median 159 ns 159 ns 10 +Short replace const symbols with string expressions and without remembering all search results_stddev 3.16 ns 3.16 ns 10 +Short replace const symbols with string expressions and without remembering all search results_cv 1.99 % 1.99 % 10 +Short replace const symbols with string expressions and memorization of all search results_mean 149 ns 149 ns 10 +Short replace const symbols with string expressions and memorization of all search results_median 149 ns 149 ns 10 +Short replace const symbols with string expressions and memorization of all search results_stddev 3.86 ns 3.86 ns 10 +Short replace const symbols with string expressions and memorization of all search results_cv 2.59 % 2.59 % 10 +----- Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to ---- in std::string|64_mean 174 ns 174 ns 10 +replace bb to ---- in std::string|64_median 166 ns 166 ns 10 +replace bb to ---- in std::string|64_stddev 16.4 ns 16.4 ns 10 +replace bb to ---- in std::string|64_cv 9.46 % 9.46 % 10 +replace bb to ---- in std::string|256_mean 511 ns 511 ns 10 +replace bb to ---- in std::string|256_median 498 ns 498 ns 10 +replace bb to ---- in std::string|256_stddev 28.1 ns 28.1 ns 10 +replace bb to ---- in std::string|256_cv 5.50 % 5.50 % 10 +replace bb to ---- in std::string|512_mean 1180 ns 1180 ns 10 +replace bb to ---- in std::string|512_median 1173 ns 1173 ns 10 +replace bb to ---- in std::string|512_stddev 20.5 ns 20.5 ns 10 +replace bb to ---- in std::string|512_cv 1.74 % 1.74 % 10 +replace bb to ---- in std::string|1024_mean 2244 ns 2244 ns 10 +replace bb to ---- in std::string|1024_median 2253 ns 2253 ns 10 +replace bb to ---- in std::string|1024_stddev 92.2 ns 92.2 ns 10 +replace bb to ---- in std::string|1024_cv 4.11 % 4.11 % 10 +replace bb to ---- in std::string|2048_mean 6009 ns 6009 ns 10 +replace bb to ---- in std::string|2048_median 5918 ns 5918 ns 10 +replace bb to ---- in std::string|2048_stddev 398 ns 398 ns 10 +replace bb to ---- in std::string|2048_cv 6.62 % 6.62 % 10 +replace bb to ---- in lstringa<8>|64_mean 154 ns 154 ns 10 +replace bb to ---- in lstringa<8>|64_median 154 ns 154 ns 10 +replace bb to ---- in lstringa<8>|64_stddev 3.85 ns 3.85 ns 10 +replace bb to ---- in lstringa<8>|64_cv 2.50 % 2.50 % 10 +replace bb to ---- in lstringa<8>|256_mean 459 ns 459 ns 10 +replace bb to ---- in lstringa<8>|256_median 461 ns 461 ns 10 +replace bb to ---- in lstringa<8>|256_stddev 9.64 ns 9.64 ns 10 +replace bb to ---- in lstringa<8>|256_cv 2.10 % 2.10 % 10 +replace bb to ---- in lstringa<8>|512_mean 850 ns 850 ns 10 +replace bb to ---- in lstringa<8>|512_median 855 ns 855 ns 10 +replace bb to ---- in lstringa<8>|512_stddev 16.0 ns 16.0 ns 10 +replace bb to ---- in lstringa<8>|512_cv 1.88 % 1.88 % 10 +replace bb to ---- in lstringa<8>|1024_mean 1775 ns 1775 ns 10 +replace bb to ---- in lstringa<8>|1024_median 1779 ns 1779 ns 10 +replace bb to ---- in lstringa<8>|1024_stddev 74.7 ns 74.7 ns 10 +replace bb to ---- in lstringa<8>|1024_cv 4.21 % 4.21 % 10 +replace bb to ---- in lstringa<8>|2048_mean 3322 ns 3322 ns 10 +replace bb to ---- in lstringa<8>|2048_median 3322 ns 3322 ns 10 +replace bb to ---- in lstringa<8>|2048_stddev 95.3 ns 95.4 ns 10 +replace bb to ---- in lstringa<8>|2048_cv 2.87 % 2.87 % 10 +replace bb to ---- by init stringa|64_mean 124 ns 124 ns 10 +replace bb to ---- by init stringa|64_median 124 ns 124 ns 10 +replace bb to ---- by init stringa|64_stddev 2.40 ns 2.40 ns 10 +replace bb to ---- by init stringa|64_cv 1.93 % 1.93 % 10 +replace bb to ---- by init stringa|256_mean 483 ns 483 ns 10 +replace bb to ---- by init stringa|256_median 481 ns 481 ns 10 +replace bb to ---- by init stringa|256_stddev 21.5 ns 21.5 ns 10 +replace bb to ---- by init stringa|256_cv 4.44 % 4.44 % 10 +replace bb to ---- by init stringa|512_mean 888 ns 888 ns 10 +replace bb to ---- by init stringa|512_median 884 ns 884 ns 10 +replace bb to ---- by init stringa|512_stddev 16.3 ns 16.3 ns 10 +replace bb to ---- by init stringa|512_cv 1.83 % 1.83 % 10 +replace bb to ---- by init stringa|1024_mean 1787 ns 1787 ns 10 +replace bb to ---- by init stringa|1024_median 1788 ns 1788 ns 10 +replace bb to ---- by init stringa|1024_stddev 35.7 ns 35.7 ns 10 +replace bb to ---- by init stringa|1024_cv 2.00 % 2.00 % 10 +replace bb to ---- by init stringa|2048_mean 3741 ns 3741 ns 10 +replace bb to ---- by init stringa|2048_median 3653 ns 3653 ns 10 +replace bb to ---- by init stringa|2048_stddev 217 ns 217 ns 10 +replace bb to ---- by init stringa|2048_cv 5.80 % 5.80 % 10 +----- Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to -- in std::string|64_mean 118 ns 118 ns 10 +replace bb to -- in std::string|64_median 117 ns 117 ns 10 +replace bb to -- in std::string|64_stddev 4.91 ns 4.91 ns 10 +replace bb to -- in std::string|64_cv 4.16 % 4.16 % 10 +replace bb to -- in std::string|256_mean 370 ns 370 ns 10 +replace bb to -- in std::string|256_median 370 ns 370 ns 10 +replace bb to -- in std::string|256_stddev 10.4 ns 10.4 ns 10 +replace bb to -- in std::string|256_cv 2.81 % 2.81 % 10 +replace bb to -- in std::string|512_mean 739 ns 739 ns 10 +replace bb to -- in std::string|512_median 737 ns 737 ns 10 +replace bb to -- in std::string|512_stddev 11.5 ns 11.5 ns 10 +replace bb to -- in std::string|512_cv 1.56 % 1.56 % 10 +replace bb to -- in std::string|1024_mean 1423 ns 1423 ns 10 +replace bb to -- in std::string|1024_median 1416 ns 1416 ns 10 +replace bb to -- in std::string|1024_stddev 42.4 ns 42.4 ns 10 +replace bb to -- in std::string|1024_cv 2.98 % 2.98 % 10 +replace bb to -- in std::string|2048_mean 2898 ns 2898 ns 10 +replace bb to -- in std::string|2048_median 2873 ns 2873 ns 10 +replace bb to -- in std::string|2048_stddev 126 ns 126 ns 10 +replace bb to -- in std::string|2048_cv 4.36 % 4.36 % 10 +replace bb to -- in lstringa<8>|64_mean 99.1 ns 99.1 ns 10 +replace bb to -- in lstringa<8>|64_median 98.8 ns 98.8 ns 10 +replace bb to -- in lstringa<8>|64_stddev 1.97 ns 1.97 ns 10 +replace bb to -- in lstringa<8>|64_cv 1.99 % 1.99 % 10 replace bb to -- in lstringa<8>|256_mean 301 ns 301 ns 10 -replace bb to -- in lstringa<8>|256_median 300 ns 300 ns 10 -replace bb to -- in lstringa<8>|256_stddev 4.94 ns 4.94 ns 10 -replace bb to -- in lstringa<8>|256_cv 1.64 % 1.64 % 10 -replace bb to -- in lstringa<8>|512_mean 548 ns 548 ns 10 -replace bb to -- in lstringa<8>|512_median 549 ns 549 ns 10 -replace bb to -- in lstringa<8>|512_stddev 11.5 ns 11.5 ns 10 -replace bb to -- in lstringa<8>|512_cv 2.10 % 2.10 % 10 -replace bb to -- in lstringa<8>|1024_mean 1112 ns 1112 ns 10 -replace bb to -- in lstringa<8>|1024_median 1117 ns 1117 ns 10 -replace bb to -- in lstringa<8>|1024_stddev 21.9 ns 21.9 ns 10 -replace bb to -- in lstringa<8>|1024_cv 1.97 % 1.97 % 10 -replace bb to -- in lstringa<8>|2048_mean 2105 ns 2105 ns 10 -replace bb to -- in lstringa<8>|2048_median 2088 ns 2088 ns 10 -replace bb to -- in lstringa<8>|2048_stddev 58.9 ns 58.9 ns 10 -replace bb to -- in lstringa<8>|2048_cv 2.80 % 2.80 % 10 -replace bb to -- by init stringa|64_mean 91.4 ns 91.4 ns 10 -replace bb to -- by init stringa|64_median 91.0 ns 91.0 ns 10 -replace bb to -- by init stringa|64_stddev 1.74 ns 1.74 ns 10 -replace bb to -- by init stringa|64_cv 1.90 % 1.90 % 10 -replace bb to -- by init stringa|256_mean 261 ns 261 ns 10 -replace bb to -- by init stringa|256_median 258 ns 258 ns 10 -replace bb to -- by init stringa|256_stddev 7.95 ns 7.95 ns 10 -replace bb to -- by init stringa|256_cv 3.05 % 3.05 % 10 -replace bb to -- by init stringa|512_mean 485 ns 485 ns 10 -replace bb to -- by init stringa|512_median 485 ns 485 ns 10 -replace bb to -- by init stringa|512_stddev 6.01 ns 6.01 ns 10 -replace bb to -- by init stringa|512_cv 1.24 % 1.24 % 10 -replace bb to -- by init stringa|1024_mean 984 ns 984 ns 10 -replace bb to -- by init stringa|1024_median 976 ns 976 ns 10 -replace bb to -- by init stringa|1024_stddev 31.5 ns 31.5 ns 10 -replace bb to -- by init stringa|1024_cv 3.20 % 3.20 % 10 -replace bb to -- by init stringa|2048_mean 1862 ns 1862 ns 10 -replace bb to -- by init stringa|2048_median 1872 ns 1872 ns 10 -replace bb to -- by init stringa|2048_stddev 35.5 ns 35.5 ns 10 -replace bb to -- by init stringa|2048_cv 1.91 % 1.91 % 10 ------ Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -hashStrMapA emplace & find stringa;_mean 3769704 ns 3769718 ns 10 -hashStrMapA emplace & find stringa;_median 3760472 ns 3760485 ns 10 -hashStrMapA emplace & find stringa;_stddev 60750 ns 60751 ns 10 -hashStrMapA emplace & find stringa;_cv 1.61 % 1.61 % 10 -std::unordered_map emplace & find std::string;_mean 3652417 ns 3652436 ns 10 -std::unordered_map emplace & find std::string;_median 3645060 ns 3645073 ns 10 -std::unordered_map emplace & find std::string;_stddev 82821 ns 82811 ns 10 -std::unordered_map emplace & find std::string;_cv 2.27 % 2.27 % 10 -hashStrMapA emplace & find ssa;_mean 3800957 ns 3800973 ns 10 -hashStrMapA emplace & find ssa;_median 3796589 ns 3796604 ns 10 -hashStrMapA emplace & find ssa;_stddev 47150 ns 47150 ns 10 -hashStrMapA emplace & find ssa;_cv 1.24 % 1.24 % 10 -std::unordered_map emplace & find std::string_view;_mean 4103196 ns 4103210 ns 10 -std::unordered_map emplace & find std::string_view;_median 4108227 ns 4108241 ns 10 -std::unordered_map emplace & find std::string_view;_stddev 68621 ns 68620 ns 10 -std::unordered_map emplace & find std::string_view;_cv 1.67 % 1.67 % 10 ------ Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -Build func full name std::string;_mean 949 ns 949 ns 10 -Build func full name std::string;_median 945 ns 945 ns 10 -Build func full name std::string;_stddev 33.5 ns 33.5 ns 10 -Build func full name std::string;_cv 3.53 % 3.53 % 10 -Build func full name std::string 1;_mean 1025 ns 1025 ns 10 -Build func full name std::string 1;_median 1017 ns 1017 ns 10 -Build func full name std::string 1;_stddev 35.7 ns 35.7 ns 10 -Build func full name std::string 1;_cv 3.48 % 3.48 % 10 -Build func full name std::stream;_mean 2654 ns 2654 ns 10 -Build func full name std::stream;_median 2648 ns 2648 ns 10 -Build func full name std::stream;_stddev 33.0 ns 33.0 ns 10 -Build func full name std::stream;_cv 1.24 % 1.24 % 10 -Build func full name stringa;_mean 500 ns 500 ns 10 -Build func full name stringa;_median 494 ns 494 ns 10 -Build func full name stringa;_stddev 16.0 ns 16.0 ns 10 -Build func full name stringa;_cv 3.20 % 3.20 % 10 -Build func full name stringa 1;_mean 716 ns 716 ns 10 -Build func full name stringa 1;_median 712 ns 712 ns 10 -Build func full name stringa 1;_stddev 20.9 ns 20.9 ns 10 -Build func full name stringa 1;_cv 2.92 % 2.92 % 10 +replace bb to -- in lstringa<8>|256_median 296 ns 296 ns 10 +replace bb to -- in lstringa<8>|256_stddev 11.4 ns 11.4 ns 10 +replace bb to -- in lstringa<8>|256_cv 3.78 % 3.78 % 10 +replace bb to -- in lstringa<8>|512_mean 566 ns 566 ns 10 +replace bb to -- in lstringa<8>|512_median 563 ns 563 ns 10 +replace bb to -- in lstringa<8>|512_stddev 8.23 ns 8.23 ns 10 +replace bb to -- in lstringa<8>|512_cv 1.45 % 1.45 % 10 +replace bb to -- in lstringa<8>|1024_mean 1104 ns 1104 ns 10 +replace bb to -- in lstringa<8>|1024_median 1112 ns 1112 ns 10 +replace bb to -- in lstringa<8>|1024_stddev 26.7 ns 26.7 ns 10 +replace bb to -- in lstringa<8>|1024_cv 2.42 % 2.42 % 10 +replace bb to -- in lstringa<8>|2048_mean 2088 ns 2088 ns 10 +replace bb to -- in lstringa<8>|2048_median 2078 ns 2078 ns 10 +replace bb to -- in lstringa<8>|2048_stddev 49.4 ns 49.4 ns 10 +replace bb to -- in lstringa<8>|2048_cv 2.37 % 2.37 % 10 +replace bb to -- by init stringa|64_mean 99.6 ns 99.6 ns 10 +replace bb to -- by init stringa|64_median 98.7 ns 98.7 ns 10 +replace bb to -- by init stringa|64_stddev 5.18 ns 5.18 ns 10 +replace bb to -- by init stringa|64_cv 5.20 % 5.20 % 10 +replace bb to -- by init stringa|256_mean 274 ns 274 ns 10 +replace bb to -- by init stringa|256_median 275 ns 275 ns 10 +replace bb to -- by init stringa|256_stddev 6.18 ns 6.18 ns 10 +replace bb to -- by init stringa|256_cv 2.26 % 2.26 % 10 +replace bb to -- by init stringa|512_mean 527 ns 527 ns 10 +replace bb to -- by init stringa|512_median 516 ns 516 ns 10 +replace bb to -- by init stringa|512_stddev 29.0 ns 29.0 ns 10 +replace bb to -- by init stringa|512_cv 5.50 % 5.50 % 10 +replace bb to -- by init stringa|1024_mean 1029 ns 1029 ns 10 +replace bb to -- by init stringa|1024_median 1029 ns 1029 ns 10 +replace bb to -- by init stringa|1024_stddev 14.0 ns 14.0 ns 10 +replace bb to -- by init stringa|1024_cv 1.36 % 1.36 % 10 +replace bb to -- by init stringa|2048_mean 2041 ns 2041 ns 10 +replace bb to -- by init stringa|2048_median 2041 ns 2041 ns 10 +replace bb to -- by init stringa|2048_stddev 41.6 ns 41.6 ns 10 +replace bb to -- by init stringa|2048_cv 2.04 % 2.04 % 10 +----- Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +hashStrMapA emplace & find stringa;_mean 3720924 ns 3720931 ns 10 +hashStrMapA emplace & find stringa;_median 3710051 ns 3710034 ns 10 +hashStrMapA emplace & find stringa;_stddev 41589 ns 41593 ns 10 +hashStrMapA emplace & find stringa;_cv 1.12 % 1.12 % 10 +std::unordered_map emplace & find std::string;_mean 3624563 ns 3624558 ns 10 +std::unordered_map emplace & find std::string;_median 3613358 ns 3613332 ns 10 +std::unordered_map emplace & find std::string;_stddev 57870 ns 57855 ns 10 +std::unordered_map emplace & find std::string;_cv 1.60 % 1.60 % 10 +hashStrMapA emplace & find ssa;_mean 3730268 ns 3730281 ns 10 +hashStrMapA emplace & find ssa;_median 3700358 ns 3700373 ns 10 +hashStrMapA emplace & find ssa;_stddev 105448 ns 105449 ns 10 +hashStrMapA emplace & find ssa;_cv 2.83 % 2.83 % 10 +std::unordered_map emplace & find std::string_view;_mean 4036697 ns 4036676 ns 10 +std::unordered_map emplace & find std::string_view;_median 4029808 ns 4029818 ns 10 +std::unordered_map emplace & find std::string_view;_stddev 57315 ns 57303 ns 10 +std::unordered_map emplace & find std::string_view;_cv 1.42 % 1.42 % 10 +----- Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +Build func full name std::string;_mean 1031 ns 1031 ns 10 +Build func full name std::string;_median 951 ns 951 ns 10 +Build func full name std::string;_stddev 117 ns 117 ns 10 +Build func full name std::string;_cv 11.31 % 11.31 % 10 +Build func full name std::string 1;_mean 999 ns 999 ns 10 +Build func full name std::string 1;_median 1003 ns 1003 ns 10 +Build func full name std::string 1;_stddev 17.0 ns 17.0 ns 10 +Build func full name std::string 1;_cv 1.70 % 1.70 % 10 +Build func full name std::stream;_mean 2626 ns 2626 ns 10 +Build func full name std::stream;_median 2620 ns 2620 ns 10 +Build func full name std::stream;_stddev 58.5 ns 58.5 ns 10 +Build func full name std::stream;_cv 2.23 % 2.23 % 10 +Build func full name stringa;_mean 602 ns 602 ns 10 +Build func full name stringa;_median 588 ns 588 ns 10 +Build func full name stringa;_stddev 33.5 ns 33.5 ns 10 +Build func full name stringa;_cv 5.57 % 5.57 % 10 +Build func full name stringa 1;_mean 674 ns 674 ns 10 +Build func full name stringa 1;_median 667 ns 667 ns 10 +Build func full name stringa 1;_stddev 29.9 ns 29.9 ns 10 +Build func full name stringa 1;_cv 4.43 % 4.43 % 10 diff --git a/bench/results/002-Xeon E5-2682 v4, Windows 10, Clang-19.txt b/bench/results/002-Xeon E5-2682 v4, Windows 10, Clang-19.txt index b97107a..72ccbba 100644 --- a/bench/results/002-Xeon E5-2682 v4, Windows 10, Clang-19.txt +++ b/bench/results/002-Xeon E5-2682 v4, Windows 10, Clang-19.txt @@ -1,6 +1,6 @@ -2025-08-06T12:08:34+03:00 +2025-11-26T18:59:15+03:00 Running benchStr.exe -Run on (32 X 2518.87 MHz CPU s) +Run on (32 X 2494 MHz CPU s) CPU Caches: L1 Data 32 KiB (x16) L1 Instruction 32 KiB (x16) @@ -9,769 +9,782 @@ CPU Caches: -------------------------------------------------------------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------------------------------------------------------------- ------ Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e;_mean 1.12 ns 1.11 ns 10 -std::string e;_median 1.12 ns 1.11 ns 10 -std::string e;_stddev 0.025 ns 0.033 ns 10 -std::string e;_cv 2.24 % 2.98 % 10 -std::string_view e;_mean 0.377 ns 0.373 ns 10 -std::string_view e;_median 0.376 ns 0.375 ns 10 -std::string_view e;_stddev 0.021 ns 0.025 ns 10 -std::string_view e;_cv 5.58 % 6.67 % 10 -ssa e;_mean 0.367 ns 0.364 ns 10 -ssa e;_median 0.367 ns 0.359 ns 10 -ssa e;_stddev 0.007 ns 0.015 ns 10 -ssa e;_cv 1.83 % 4.07 % 10 -stringa e;_mean 0.751 ns 0.748 ns 10 -stringa e;_median 0.747 ns 0.750 ns 10 -stringa e;_stddev 0.018 ns 0.019 ns 10 -stringa e;_cv 2.43 % 2.50 % 10 -lstringa<20> e;_mean 1.14 ns 1.13 ns 10 -lstringa<20> e;_median 1.14 ns 1.12 ns 10 -lstringa<20> e;_stddev 0.022 ns 0.018 ns 10 -lstringa<20> e;_cv 1.96 % 1.60 % 10 -lstringa<40> e;_mean 1.15 ns 1.13 ns 10 -lstringa<40> e;_median 1.12 ns 1.12 ns 10 -lstringa<40> e;_stddev 0.047 ns 0.044 ns 10 -lstringa<40> e;_cv 4.14 % 3.90 % 10 ------ Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text";_mean 1.85 ns 1.84 ns 10 +----- Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e;_mean 1.11 ns 1.11 ns 10 +std::string e;_median 1.11 ns 1.10 ns 10 +std::string e;_stddev 0.029 ns 0.026 ns 10 +std::string e;_cv 2.61 % 2.37 % 10 +std::string_view e;_mean 0.368 ns 0.368 ns 10 +std::string_view e;_median 0.365 ns 0.367 ns 10 +std::string_view e;_stddev 0.012 ns 0.012 ns 10 +std::string_view e;_cv 3.19 % 3.29 % 10 +ssa e;_mean 0.361 ns 0.361 ns 10 +ssa e;_median 0.360 ns 0.360 ns 10 +ssa e;_stddev 0.006 ns 0.006 ns 10 +ssa e;_cv 1.55 % 1.71 % 10 +stringa e;_mean 0.736 ns 0.732 ns 10 +stringa e;_median 0.736 ns 0.732 ns 10 +stringa e;_stddev 0.011 ns 0.016 ns 10 +stringa e;_cv 1.51 % 2.24 % 10 +lstringa<20> e;_mean 1.12 ns 1.11 ns 10 +lstringa<20> e;_median 1.12 ns 1.12 ns 10 +lstringa<20> e;_stddev 0.016 ns 0.013 ns 10 +lstringa<20> e;_cv 1.39 % 1.13 % 10 +lstringa<40> e;_mean 1.13 ns 1.12 ns 10 +lstringa<40> e;_median 1.14 ns 1.12 ns 10 +lstringa<40> e;_stddev 0.027 ns 0.022 ns 10 +lstringa<40> e;_cv 2.40 % 1.96 % 10 +----- Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text";_mean 1.87 ns 1.86 ns 10 std::string e = "Test text";_median 1.85 ns 1.84 ns 10 -std::string e = "Test text";_stddev 0.025 ns 0.037 ns 10 -std::string e = "Test text";_cv 1.37 % 1.99 % 10 -std::string_view e = "Test text";_mean 0.740 ns 0.736 ns 10 -std::string_view e = "Test text";_median 0.740 ns 0.734 ns 10 -std::string_view e = "Test text";_stddev 0.012 ns 0.012 ns 10 -std::string_view e = "Test text";_cv 1.61 % 1.57 % 10 -ssa e = "Test text";_mean 0.371 ns 0.369 ns 10 -ssa e = "Test text";_median 0.370 ns 0.375 ns 10 -ssa e = "Test text";_stddev 0.006 ns 0.015 ns 10 -ssa e = "Test text";_cv 1.67 % 4.09 % 10 -stringa e = "Test text";_mean 1.12 ns 1.11 ns 10 -stringa e = "Test text";_median 1.12 ns 1.11 ns 10 -stringa e = "Test text";_stddev 0.028 ns 0.028 ns 10 -stringa e = "Test text";_cv 2.47 % 2.56 % 10 -lstringa<20> e = "Test text";_mean 1.84 ns 1.84 ns 10 +std::string e = "Test text";_stddev 0.065 ns 0.056 ns 10 +std::string e = "Test text";_cv 3.47 % 3.04 % 10 +std::string_view e = "Test text";_mean 0.727 ns 0.722 ns 10 +std::string_view e = "Test text";_median 0.725 ns 0.715 ns 10 +std::string_view e = "Test text";_stddev 0.009 ns 0.015 ns 10 +std::string_view e = "Test text";_cv 1.26 % 2.04 % 10 +ssa e = "Test text";_mean 0.364 ns 0.363 ns 10 +ssa e = "Test text";_median 0.365 ns 0.365 ns 10 +ssa e = "Test text";_stddev 0.004 ns 0.007 ns 10 +ssa e = "Test text";_cv 1.20 % 2.03 % 10 +stringa e = "Test text";_mean 1.10 ns 1.09 ns 10 +stringa e = "Test text";_median 1.10 ns 1.10 ns 10 +stringa e = "Test text";_stddev 0.015 ns 0.016 ns 10 +stringa e = "Test text";_cv 1.36 % 1.51 % 10 +lstringa<20> e = "Test text";_mean 1.85 ns 1.85 ns 10 lstringa<20> e = "Test text";_median 1.85 ns 1.84 ns 10 -lstringa<20> e = "Test text";_stddev 0.022 ns 0.042 ns 10 -lstringa<20> e = "Test text";_cv 1.21 % 2.27 % 10 -lstringa<40> e = "Test text";_mean 1.87 ns 1.85 ns 10 -lstringa<40> e = "Test text";_median 1.87 ns 1.84 ns 10 -lstringa<40> e = "Test text";_stddev 0.035 ns 0.026 ns 10 -lstringa<40> e = "Test text";_cv 1.88 % 1.43 % 10 ------ Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890";_mean 78.0 ns 76.6 ns 10 -std::string e = "123456789012345678901234567890";_median 78.2 ns 76.4 ns 10 -std::string e = "123456789012345678901234567890";_stddev 2.16 ns 2.02 ns 10 -std::string e = "123456789012345678901234567890";_cv 2.77 % 2.64 % 10 -std::string_view e = "123456789012345678901234567890";_mean 0.739 ns 0.731 ns 10 -std::string_view e = "123456789012345678901234567890";_median 0.736 ns 0.732 ns 10 -std::string_view e = "123456789012345678901234567890";_stddev 0.010 ns 0.017 ns 10 -std::string_view e = "123456789012345678901234567890";_cv 1.40 % 2.37 % 10 -ssa e = "123456789012345678901234567890";_mean 0.369 ns 0.370 ns 10 -ssa e = "123456789012345678901234567890";_median 0.368 ns 0.375 ns 10 -ssa e = "123456789012345678901234567890";_stddev 0.007 ns 0.011 ns 10 -ssa e = "123456789012345678901234567890";_cv 1.79 % 2.85 % 10 -stringa e = "123456789012345678901234567890";_mean 1.11 ns 1.10 ns 10 +lstringa<20> e = "Test text";_stddev 0.029 ns 0.042 ns 10 +lstringa<20> e = "Test text";_cv 1.55 % 2.25 % 10 +lstringa<40> e = "Test text";_mean 1.84 ns 1.83 ns 10 +lstringa<40> e = "Test text";_median 1.84 ns 1.82 ns 10 +lstringa<40> e = "Test text";_stddev 0.023 ns 0.034 ns 10 +lstringa<40> e = "Test text";_cv 1.26 % 1.88 % 10 +----- Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890";_mean 78.5 ns 77.8 ns 10 +std::string e = "123456789012345678901234567890";_median 78.6 ns 78.5 ns 10 +std::string e = "123456789012345678901234567890";_stddev 0.991 ns 1.47 ns 10 +std::string e = "123456789012345678901234567890";_cv 1.26 % 1.89 % 10 +std::string_view e = "123456789012345678901234567890";_mean 0.731 ns 0.729 ns 10 +std::string_view e = "123456789012345678901234567890";_median 0.731 ns 0.724 ns 10 +std::string_view e = "123456789012345678901234567890";_stddev 0.009 ns 0.018 ns 10 +std::string_view e = "123456789012345678901234567890";_cv 1.26 % 2.47 % 10 +ssa e = "123456789012345678901234567890";_mean 0.371 ns 0.371 ns 10 +ssa e = "123456789012345678901234567890";_median 0.368 ns 0.369 ns 10 +ssa e = "123456789012345678901234567890";_stddev 0.010 ns 0.010 ns 10 +ssa e = "123456789012345678901234567890";_cv 2.79 % 2.66 % 10 +stringa e = "123456789012345678901234567890";_mean 1.12 ns 1.12 ns 10 stringa e = "123456789012345678901234567890";_median 1.11 ns 1.12 ns 10 -stringa e = "123456789012345678901234567890";_stddev 0.014 ns 0.030 ns 10 -stringa e = "123456789012345678901234567890";_cv 1.30 % 2.71 % 10 -lstringa<20> e = "123456789012345678901234567890";_mean 82.0 ns 80.7 ns 10 -lstringa<20> e = "123456789012345678901234567890";_median 81.1 ns 79.3 ns 10 -lstringa<20> e = "123456789012345678901234567890";_stddev 2.75 ns 3.08 ns 10 -lstringa<20> e = "123456789012345678901234567890";_cv 3.35 % 3.82 % 10 -lstringa<40> e = "123456789012345678901234567890";_mean 1.85 ns 1.84 ns 10 -lstringa<40> e = "123456789012345678901234567890";_median 1.85 ns 1.86 ns 10 -lstringa<40> e = "123456789012345678901234567890";_stddev 0.024 ns 0.049 ns 10 -lstringa<40> e = "123456789012345678901234567890";_cv 1.30 % 2.67 % 10 ------ Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text"; auto c{e};_mean 1.87 ns 1.86 ns 10 -std::string e = "Test text"; auto c{e};_median 1.86 ns 1.86 ns 10 -std::string e = "Test text"; auto c{e};_stddev 0.038 ns 0.036 ns 10 -std::string e = "Test text"; auto c{e};_cv 2.05 % 1.91 % 10 -std::string_view e = "Test text"; auto c{e};_mean 0.376 ns 0.377 ns 10 -std::string_view e = "Test text"; auto c{e};_median 0.374 ns 0.375 ns 10 -std::string_view e = "Test text"; auto c{e};_stddev 0.012 ns 0.012 ns 10 -std::string_view e = "Test text"; auto c{e};_cv 3.19 % 3.06 % 10 -ssa e = "Test text"; auto c{e};_mean 0.377 ns 0.378 ns 10 -ssa e = "Test text"; auto c{e};_median 0.375 ns 0.375 ns 10 -ssa e = "Test text"; auto c{e};_stddev 0.014 ns 0.014 ns 10 -ssa e = "Test text"; auto c{e};_cv 3.68 % 3.80 % 10 -stringa e = "Test text"; auto c{e};_mean 1.32 ns 1.32 ns 10 -stringa e = "Test text"; auto c{e};_median 1.32 ns 1.31 ns 10 -stringa e = "Test text"; auto c{e};_stddev 0.024 ns 0.022 ns 10 -stringa e = "Test text"; auto c{e};_cv 1.78 % 1.67 % 10 -lstringa<20> e = "Test text"; auto c{e};_mean 5.23 ns 5.20 ns 10 -lstringa<20> e = "Test text"; auto c{e};_median 5.23 ns 5.16 ns 10 -lstringa<20> e = "Test text"; auto c{e};_stddev 0.058 ns 0.105 ns 10 -lstringa<20> e = "Test text"; auto c{e};_cv 1.11 % 2.03 % 10 -lstringa<40> e = "Test text"; auto c{e};_mean 5.24 ns 5.22 ns 10 -lstringa<40> e = "Test text"; auto c{e};_median 5.24 ns 5.23 ns 10 -lstringa<40> e = "Test text"; auto c{e};_stddev 0.068 ns 0.109 ns 10 -lstringa<40> e = "Test text"; auto c{e};_cv 1.30 % 2.09 % 10 ------ Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890"; auto c{e};_mean 78.2 ns 78.0 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_median 77.6 ns 77.6 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_stddev 1.99 ns 2.73 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_cv 2.55 % 3.51 % 10 +stringa e = "123456789012345678901234567890";_stddev 0.014 ns 0.015 ns 10 +stringa e = "123456789012345678901234567890";_cv 1.24 % 1.31 % 10 +lstringa<20> e = "123456789012345678901234567890";_mean 80.1 ns 79.3 ns 10 +lstringa<20> e = "123456789012345678901234567890";_median 79.9 ns 79.5 ns 10 +lstringa<20> e = "123456789012345678901234567890";_stddev 1.77 ns 2.30 ns 10 +lstringa<20> e = "123456789012345678901234567890";_cv 2.21 % 2.90 % 10 +lstringa<40> e = "123456789012345678901234567890";_mean 2.53 ns 2.53 ns 10 +lstringa<40> e = "123456789012345678901234567890";_median 2.53 ns 2.55 ns 10 +lstringa<40> e = "123456789012345678901234567890";_stddev 0.016 ns 0.031 ns 10 +lstringa<40> e = "123456789012345678901234567890";_cv 0.64 % 1.21 % 10 +----- Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text"; auto c{e};_mean 1.85 ns 1.84 ns 10 +std::string e = "Test text"; auto c{e};_median 1.85 ns 1.84 ns 10 +std::string e = "Test text"; auto c{e};_stddev 0.023 ns 0.031 ns 10 +std::string e = "Test text"; auto c{e};_cv 1.26 % 1.68 % 10 +std::string_view e = "Test text"; auto c{e};_mean 0.370 ns 0.368 ns 10 +std::string_view e = "Test text"; auto c{e};_median 0.371 ns 0.368 ns 10 +std::string_view e = "Test text"; auto c{e};_stddev 0.006 ns 0.007 ns 10 +std::string_view e = "Test text"; auto c{e};_cv 1.65 % 1.86 % 10 +ssa e = "Test text"; auto c{e};_mean 0.370 ns 0.369 ns 10 +ssa e = "Test text"; auto c{e};_median 0.369 ns 0.369 ns 10 +ssa e = "Test text"; auto c{e};_stddev 0.003 ns 0.004 ns 10 +ssa e = "Test text"; auto c{e};_cv 0.80 % 1.02 % 10 +stringa e = "Test text"; auto c{e};_mean 1.30 ns 1.30 ns 10 +stringa e = "Test text"; auto c{e};_median 1.30 ns 1.29 ns 10 +stringa e = "Test text"; auto c{e};_stddev 0.016 ns 0.021 ns 10 +stringa e = "Test text"; auto c{e};_cv 1.22 % 1.63 % 10 +lstringa<20> e = "Test text"; auto c{e};_mean 5.25 ns 5.23 ns 10 +lstringa<20> e = "Test text"; auto c{e};_median 5.26 ns 5.23 ns 10 +lstringa<20> e = "Test text"; auto c{e};_stddev 0.108 ns 0.133 ns 10 +lstringa<20> e = "Test text"; auto c{e};_cv 2.06 % 2.54 % 10 +lstringa<40> e = "Test text"; auto c{e};_mean 5.36 ns 5.34 ns 10 +lstringa<40> e = "Test text"; auto c{e};_median 5.22 ns 5.16 ns 10 +lstringa<40> e = "Test text"; auto c{e};_stddev 0.303 ns 0.336 ns 10 +lstringa<40> e = "Test text"; auto c{e};_cv 5.65 % 6.29 % 10 +----- Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890"; auto c{e};_mean 81.7 ns 81.5 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_median 79.6 ns 79.5 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_stddev 4.61 ns 4.42 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_cv 5.64 % 5.43 % 10 std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 0.741 ns 0.739 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_median 0.743 ns 0.741 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.008 ns 0.012 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 1.14 % 1.65 % 10 -ssa e = "123456789012345678901234567890"; auto c{e};_mean 0.372 ns 0.370 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_median 0.374 ns 0.375 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.006 ns 0.013 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_cv 1.71 % 3.47 % 10 -stringa e = "123456789012345678901234567890"; auto c{e};_mean 1.89 ns 1.88 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_median 1.87 ns 1.88 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.045 ns 0.034 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_cv 2.36 % 1.78 % 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 79.0 ns 78.0 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 78.7 ns 78.1 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 2.03 ns 1.80 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 2.57 % 2.30 % 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 4.95 ns 4.94 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 4.89 ns 4.84 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.243 ns 0.268 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 4.91 % 5.42 % 10 ------ Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find;_mean 39.5 ns 38.8 ns 10 -std::string::find;_median 38.9 ns 38.5 ns 10 -std::string::find;_stddev 1.56 ns 0.900 ns 10 -std::string::find;_cv 3.95 % 2.32 % 10 -std::string_view::find;_mean 39.1 ns 38.6 ns 10 -std::string_view::find;_median 39.0 ns 38.8 ns 10 -std::string_view::find;_stddev 0.455 ns 0.827 ns 10 -std::string_view::find;_cv 1.17 % 2.14 % 10 -ssa::find;_mean 18.2 ns 17.9 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_median 0.739 ns 0.741 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.013 ns 0.012 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 1.79 % 1.65 % 10 +ssa e = "123456789012345678901234567890"; auto c{e};_mean 0.368 ns 0.366 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_median 0.367 ns 0.368 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.005 ns 0.006 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_cv 1.32 % 1.54 % 10 +stringa e = "123456789012345678901234567890"; auto c{e};_mean 1.86 ns 1.85 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_median 1.85 ns 1.88 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.043 ns 0.048 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_cv 2.34 % 2.59 % 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 79.3 ns 78.8 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 79.0 ns 78.5 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 2.06 ns 2.44 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 2.60 % 3.09 % 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 4.94 ns 4.89 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 4.94 ns 4.87 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.150 ns 0.133 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 3.04 % 2.72 % 10 +----- Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find;_mean 39.5 ns 39.1 ns 10 +std::string::find;_median 39.5 ns 39.2 ns 10 +std::string::find;_stddev 0.887 ns 0.867 ns 10 +std::string::find;_cv 2.24 % 2.21 % 10 +std::string_view::find;_mean 40.0 ns 39.7 ns 10 +std::string_view::find;_median 39.3 ns 39.2 ns 10 +std::string_view::find;_stddev 1.48 ns 1.25 ns 10 +std::string_view::find;_cv 3.70 % 3.15 % 10 +ssa::find;_mean 18.1 ns 18.0 ns 10 ssa::find;_median 18.2 ns 18.0 ns 10 -ssa::find;_stddev 0.242 ns 0.385 ns 10 -ssa::find;_cv 1.33 % 2.15 % 10 -stringa::find;_mean 18.8 ns 18.5 ns 10 -stringa::find;_median 18.4 ns 18.4 ns 10 -stringa::find;_stddev 0.795 ns 0.461 ns 10 -stringa::find;_cv 4.22 % 2.50 % 10 -lstringa<20>::find;_mean 18.2 ns 18.1 ns 10 -lstringa<20>::find;_median 18.0 ns 18.0 ns 10 -lstringa<20>::find;_stddev 0.505 ns 0.436 ns 10 -lstringa<20>::find;_cv 2.77 % 2.41 % 10 -lstringa<40>::find;_mean 17.8 ns 17.8 ns 10 -lstringa<40>::find;_median 17.8 ns 17.6 ns 10 -lstringa<40>::find;_stddev 0.232 ns 0.324 ns 10 -lstringa<40>::find;_cv 1.31 % 1.82 % 10 -------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string copy{str_with_len_N};/15_mean 1.85 ns 1.85 ns 10 -std::string copy{str_with_len_N};/15_median 1.85 ns 1.84 ns 10 -std::string copy{str_with_len_N};/15_stddev 0.041 ns 0.035 ns 10 -std::string copy{str_with_len_N};/15_cv 2.22 % 1.91 % 10 -std::string copy{str_with_len_N};/16_mean 80.4 ns 80.1 ns 10 -std::string copy{str_with_len_N};/16_median 80.4 ns 80.6 ns 10 -std::string copy{str_with_len_N};/16_stddev 1.57 ns 1.72 ns 10 -std::string copy{str_with_len_N};/16_cv 1.95 % 2.15 % 10 -std::string copy{str_with_len_N};/23_mean 81.2 ns 80.9 ns 10 -std::string copy{str_with_len_N};/23_median 80.8 ns 80.2 ns 10 -std::string copy{str_with_len_N};/23_stddev 2.51 ns 2.99 ns 10 -std::string copy{str_with_len_N};/23_cv 3.09 % 3.69 % 10 -std::string copy{str_with_len_N};/24_mean 80.9 ns 80.4 ns 10 -std::string copy{str_with_len_N};/24_median 80.6 ns 80.2 ns 10 -std::string copy{str_with_len_N};/24_stddev 1.27 ns 1.29 ns 10 -std::string copy{str_with_len_N};/24_cv 1.57 % 1.60 % 10 -std::string copy{str_with_len_N};/32_mean 85.9 ns 86.0 ns 10 -std::string copy{str_with_len_N};/32_median 86.3 ns 86.3 ns 10 -std::string copy{str_with_len_N};/32_stddev 1.08 ns 1.44 ns 10 -std::string copy{str_with_len_N};/32_cv 1.25 % 1.67 % 10 -std::string copy{str_with_len_N};/64_mean 87.1 ns 85.8 ns 10 -std::string copy{str_with_len_N};/64_median 86.4 ns 85.4 ns 10 -std::string copy{str_with_len_N};/64_stddev 3.35 ns 1.60 ns 10 -std::string copy{str_with_len_N};/64_cv 3.85 % 1.87 % 10 -std::string copy{str_with_len_N};/128_mean 90.3 ns 89.8 ns 10 -std::string copy{str_with_len_N};/128_median 89.0 ns 87.9 ns 10 -std::string copy{str_with_len_N};/128_stddev 6.26 ns 5.96 ns 10 -std::string copy{str_with_len_N};/128_cv 6.93 % 6.63 % 10 -std::string copy{str_with_len_N};/256_mean 87.8 ns 87.5 ns 10 -std::string copy{str_with_len_N};/256_median 86.8 ns 87.2 ns 10 -std::string copy{str_with_len_N};/256_stddev 2.33 ns 2.14 ns 10 -std::string copy{str_with_len_N};/256_cv 2.66 % 2.45 % 10 -std::string copy{str_with_len_N};/512_mean 90.4 ns 89.4 ns 10 -std::string copy{str_with_len_N};/512_median 90.1 ns 90.0 ns 10 -std::string copy{str_with_len_N};/512_stddev 2.20 ns 1.72 ns 10 -std::string copy{str_with_len_N};/512_cv 2.43 % 1.93 % 10 -std::string copy{str_with_len_N};/1024_mean 95.5 ns 94.6 ns 10 -std::string copy{str_with_len_N};/1024_median 94.5 ns 94.2 ns 10 -std::string copy{str_with_len_N};/1024_stddev 3.70 ns 2.93 ns 10 -std::string copy{str_with_len_N};/1024_cv 3.87 % 3.09 % 10 -std::string copy{str_with_len_N};/2048_mean 130 ns 129 ns 10 -std::string copy{str_with_len_N};/2048_median 130 ns 130 ns 10 -std::string copy{str_with_len_N};/2048_stddev 3.36 ns 2.70 ns 10 -std::string copy{str_with_len_N};/2048_cv 2.58 % 2.08 % 10 -std::string copy{str_with_len_N};/4096_mean 186 ns 185 ns 10 -std::string copy{str_with_len_N};/4096_median 184 ns 184 ns 10 -std::string copy{str_with_len_N};/4096_stddev 4.96 ns 2.83 ns 10 -std::string copy{str_with_len_N};/4096_cv 2.67 % 1.53 % 10 -stringa copy{str_with_len_N};/15_mean 1.31 ns 1.30 ns 10 +ssa::find;_stddev 0.464 ns 0.543 ns 10 +ssa::find;_cv 2.56 % 3.01 % 10 +stringa::find;_mean 19.4 ns 19.4 ns 10 +stringa::find;_median 19.3 ns 19.3 ns 10 +stringa::find;_stddev 0.580 ns 0.560 ns 10 +stringa::find;_cv 2.99 % 2.89 % 10 +lstringa<20>::find;_mean 18.1 ns 18.0 ns 10 +lstringa<20>::find;_median 18.1 ns 18.0 ns 10 +lstringa<20>::find;_stddev 0.375 ns 0.382 ns 10 +lstringa<20>::find;_cv 2.08 % 2.12 % 10 +lstringa<40>::find;_mean 18.1 ns 18.0 ns 10 +lstringa<40>::find;_median 17.9 ns 17.9 ns 10 +lstringa<40>::find;_stddev 0.797 ns 0.860 ns 10 +lstringa<40>::find;_cv 4.41 % 4.79 % 10 +------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string copy{str_with_len_N};/15_mean 1.86 ns 1.86 ns 10 +std::string copy{str_with_len_N};/15_median 1.84 ns 1.84 ns 10 +std::string copy{str_with_len_N};/15_stddev 0.043 ns 0.053 ns 10 +std::string copy{str_with_len_N};/15_cv 2.33 % 2.85 % 10 +std::string copy{str_with_len_N};/16_mean 81.6 ns 81.6 ns 10 +std::string copy{str_with_len_N};/16_median 81.9 ns 82.0 ns 10 +std::string copy{str_with_len_N};/16_stddev 2.14 ns 1.98 ns 10 +std::string copy{str_with_len_N};/16_cv 2.62 % 2.43 % 10 +std::string copy{str_with_len_N};/23_mean 79.8 ns 79.5 ns 10 +std::string copy{str_with_len_N};/23_median 79.5 ns 79.5 ns 10 +std::string copy{str_with_len_N};/23_stddev 1.04 ns 1.71 ns 10 +std::string copy{str_with_len_N};/23_cv 1.31 % 2.15 % 10 +std::string copy{str_with_len_N};/24_mean 80.5 ns 80.2 ns 10 +std::string copy{str_with_len_N};/24_median 80.2 ns 80.2 ns 10 +std::string copy{str_with_len_N};/24_stddev 1.94 ns 1.84 ns 10 +std::string copy{str_with_len_N};/24_cv 2.41 % 2.29 % 10 +std::string copy{str_with_len_N};/32_mean 86.2 ns 85.8 ns 10 +std::string copy{str_with_len_N};/32_median 85.4 ns 85.4 ns 10 +std::string copy{str_with_len_N};/32_stddev 5.54 ns 4.99 ns 10 +std::string copy{str_with_len_N};/32_cv 6.43 % 5.81 % 10 +std::string copy{str_with_len_N};/64_mean 79.3 ns 79.0 ns 10 +std::string copy{str_with_len_N};/64_median 78.5 ns 78.5 ns 10 +std::string copy{str_with_len_N};/64_stddev 4.18 ns 3.49 ns 10 +std::string copy{str_with_len_N};/64_cv 5.27 % 4.42 % 10 +std::string copy{str_with_len_N};/128_mean 85.0 ns 84.8 ns 10 +std::string copy{str_with_len_N};/128_median 84.1 ns 83.7 ns 10 +std::string copy{str_with_len_N};/128_stddev 2.42 ns 2.47 ns 10 +std::string copy{str_with_len_N};/128_cv 2.84 % 2.91 % 10 +std::string copy{str_with_len_N};/256_mean 84.4 ns 84.4 ns 10 +std::string copy{str_with_len_N};/256_median 84.6 ns 84.6 ns 10 +std::string copy{str_with_len_N};/256_stddev 1.10 ns 1.22 ns 10 +std::string copy{str_with_len_N};/256_cv 1.30 % 1.44 % 10 +std::string copy{str_with_len_N};/512_mean 86.6 ns 86.2 ns 10 +std::string copy{str_with_len_N};/512_median 86.3 ns 85.8 ns 10 +std::string copy{str_with_len_N};/512_stddev 2.26 ns 1.92 ns 10 +std::string copy{str_with_len_N};/512_cv 2.61 % 2.23 % 10 +std::string copy{str_with_len_N};/1024_mean 95.3 ns 94.8 ns 10 +std::string copy{str_with_len_N};/1024_median 95.3 ns 95.2 ns 10 +std::string copy{str_with_len_N};/1024_stddev 2.25 ns 2.80 ns 10 +std::string copy{str_with_len_N};/1024_cv 2.36 % 2.95 % 10 +std::string copy{str_with_len_N};/2048_mean 127 ns 126 ns 10 +std::string copy{str_with_len_N};/2048_median 126 ns 126 ns 10 +std::string copy{str_with_len_N};/2048_stddev 3.19 ns 2.98 ns 10 +std::string copy{str_with_len_N};/2048_cv 2.51 % 2.35 % 10 +std::string copy{str_with_len_N};/4096_mean 176 ns 176 ns 10 +std::string copy{str_with_len_N};/4096_median 176 ns 176 ns 10 +std::string copy{str_with_len_N};/4096_stddev 2.80 ns 2.83 ns 10 +std::string copy{str_with_len_N};/4096_cv 1.59 % 1.61 % 10 +stringa copy{str_with_len_N};/15_mean 1.34 ns 1.31 ns 10 stringa copy{str_with_len_N};/15_median 1.31 ns 1.30 ns 10 -stringa copy{str_with_len_N};/15_stddev 0.035 ns 0.037 ns 10 -stringa copy{str_with_len_N};/15_cv 2.65 % 2.86 % 10 -stringa copy{str_with_len_N};/16_mean 1.31 ns 1.29 ns 10 -stringa copy{str_with_len_N};/16_median 1.30 ns 1.28 ns 10 -stringa copy{str_with_len_N};/16_stddev 0.028 ns 0.030 ns 10 -stringa copy{str_with_len_N};/16_cv 2.15 % 2.32 % 10 -stringa copy{str_with_len_N};/23_mean 1.30 ns 1.30 ns 10 -stringa copy{str_with_len_N};/23_median 1.29 ns 1.29 ns 10 -stringa copy{str_with_len_N};/23_stddev 0.038 ns 0.039 ns 10 -stringa copy{str_with_len_N};/23_cv 2.90 % 3.03 % 10 -stringa copy{str_with_len_N};/24_mean 16.1 ns 16.0 ns 10 -stringa copy{str_with_len_N};/24_median 16.0 ns 16.0 ns 10 -stringa copy{str_with_len_N};/24_stddev 0.320 ns 0.329 ns 10 -stringa copy{str_with_len_N};/24_cv 1.99 % 2.05 % 10 -stringa copy{str_with_len_N};/32_mean 16.3 ns 16.0 ns 10 -stringa copy{str_with_len_N};/32_median 16.1 ns 16.0 ns 10 -stringa copy{str_with_len_N};/32_stddev 0.543 ns 0.329 ns 10 -stringa copy{str_with_len_N};/32_cv 3.34 % 2.05 % 10 -stringa copy{str_with_len_N};/64_mean 16.0 ns 15.9 ns 10 -stringa copy{str_with_len_N};/64_median 16.0 ns 16.0 ns 10 -stringa copy{str_with_len_N};/64_stddev 0.094 ns 0.247 ns 10 -stringa copy{str_with_len_N};/64_cv 0.59 % 1.55 % 10 -stringa copy{str_with_len_N};/128_mean 16.1 ns 15.9 ns 10 -stringa copy{str_with_len_N};/128_median 16.1 ns 16.0 ns 10 -stringa copy{str_with_len_N};/128_stddev 0.106 ns 0.235 ns 10 -stringa copy{str_with_len_N};/128_cv 0.66 % 1.48 % 10 -stringa copy{str_with_len_N};/256_mean 16.0 ns 15.9 ns 10 -stringa copy{str_with_len_N};/256_median 16.0 ns 16.1 ns 10 -stringa copy{str_with_len_N};/256_stddev 0.111 ns 0.271 ns 10 -stringa copy{str_with_len_N};/256_cv 0.70 % 1.70 % 10 +stringa copy{str_with_len_N};/15_stddev 0.075 ns 0.037 ns 10 +stringa copy{str_with_len_N};/15_cv 5.62 % 2.84 % 10 +stringa copy{str_with_len_N};/16_mean 1.35 ns 1.34 ns 10 +stringa copy{str_with_len_N};/16_median 1.32 ns 1.31 ns 10 +stringa copy{str_with_len_N};/16_stddev 0.059 ns 0.058 ns 10 +stringa copy{str_with_len_N};/16_cv 4.38 % 4.32 % 10 +stringa copy{str_with_len_N};/23_mean 1.35 ns 1.34 ns 10 +stringa copy{str_with_len_N};/23_median 1.32 ns 1.33 ns 10 +stringa copy{str_with_len_N};/23_stddev 0.097 ns 0.102 ns 10 +stringa copy{str_with_len_N};/23_cv 7.18 % 7.62 % 10 +stringa copy{str_with_len_N};/24_mean 15.8 ns 15.8 ns 10 +stringa copy{str_with_len_N};/24_median 15.8 ns 15.7 ns 10 +stringa copy{str_with_len_N};/24_stddev 0.075 ns 0.147 ns 10 +stringa copy{str_with_len_N};/24_cv 0.47 % 0.93 % 10 +stringa copy{str_with_len_N};/32_mean 15.8 ns 15.8 ns 10 +stringa copy{str_with_len_N};/32_median 15.8 ns 15.7 ns 10 +stringa copy{str_with_len_N};/32_stddev 0.088 ns 0.168 ns 10 +stringa copy{str_with_len_N};/32_cv 0.56 % 1.07 % 10 +stringa copy{str_with_len_N};/64_mean 16.0 ns 16.0 ns 10 +stringa copy{str_with_len_N};/64_median 15.9 ns 16.1 ns 10 +stringa copy{str_with_len_N};/64_stddev 0.299 ns 0.198 ns 10 +stringa copy{str_with_len_N};/64_cv 1.87 % 1.24 % 10 +stringa copy{str_with_len_N};/128_mean 15.8 ns 15.8 ns 10 +stringa copy{str_with_len_N};/128_median 15.8 ns 15.7 ns 10 +stringa copy{str_with_len_N};/128_stddev 0.079 ns 0.235 ns 10 +stringa copy{str_with_len_N};/128_cv 0.50 % 1.49 % 10 +stringa copy{str_with_len_N};/256_mean 15.8 ns 15.8 ns 10 +stringa copy{str_with_len_N};/256_median 15.8 ns 15.7 ns 10 +stringa copy{str_with_len_N};/256_stddev 0.056 ns 0.180 ns 10 +stringa copy{str_with_len_N};/256_cv 0.35 % 1.14 % 10 stringa copy{str_with_len_N};/512_mean 16.0 ns 15.9 ns 10 -stringa copy{str_with_len_N};/512_median 16.0 ns 16.0 ns 10 -stringa copy{str_with_len_N};/512_stddev 0.128 ns 0.331 ns 10 -stringa copy{str_with_len_N};/512_cv 0.80 % 2.08 % 10 -stringa copy{str_with_len_N};/1024_mean 16.0 ns 15.9 ns 10 -stringa copy{str_with_len_N};/1024_median 16.0 ns 16.0 ns 10 -stringa copy{str_with_len_N};/1024_stddev 0.137 ns 0.180 ns 10 -stringa copy{str_with_len_N};/1024_cv 0.85 % 1.13 % 10 +stringa copy{str_with_len_N};/512_median 15.9 ns 16.0 ns 10 +stringa copy{str_with_len_N};/512_stddev 0.154 ns 0.235 ns 10 +stringa copy{str_with_len_N};/512_cv 0.96 % 1.48 % 10 +stringa copy{str_with_len_N};/1024_mean 15.9 ns 15.8 ns 10 +stringa copy{str_with_len_N};/1024_median 15.9 ns 15.7 ns 10 +stringa copy{str_with_len_N};/1024_stddev 0.181 ns 0.259 ns 10 +stringa copy{str_with_len_N};/1024_cv 1.14 % 1.63 % 10 stringa copy{str_with_len_N};/2048_mean 16.0 ns 15.9 ns 10 -stringa copy{str_with_len_N};/2048_median 16.0 ns 16.0 ns 10 -stringa copy{str_with_len_N};/2048_stddev 0.061 ns 0.235 ns 10 -stringa copy{str_with_len_N};/2048_cv 0.38 % 1.48 % 10 -stringa copy{str_with_len_N};/4096_mean 16.0 ns 15.8 ns 10 +stringa copy{str_with_len_N};/2048_median 15.9 ns 16.0 ns 10 +stringa copy{str_with_len_N};/2048_stddev 0.156 ns 0.235 ns 10 +stringa copy{str_with_len_N};/2048_cv 0.98 % 1.48 % 10 +stringa copy{str_with_len_N};/4096_mean 15.9 ns 15.8 ns 10 stringa copy{str_with_len_N};/4096_median 15.9 ns 15.7 ns 10 -stringa copy{str_with_len_N};/4096_stddev 0.305 ns 0.275 ns 10 -stringa copy{str_with_len_N};/4096_cv 1.90 % 1.75 % 10 -lstringa<16> copy{str_with_len_N};/15_mean 4.85 ns 4.84 ns 10 -lstringa<16> copy{str_with_len_N};/15_median 4.85 ns 4.87 ns 10 -lstringa<16> copy{str_with_len_N};/15_stddev 0.072 ns 0.068 ns 10 -lstringa<16> copy{str_with_len_N};/15_cv 1.49 % 1.41 % 10 -lstringa<16> copy{str_with_len_N};/16_mean 4.83 ns 4.83 ns 10 -lstringa<16> copy{str_with_len_N};/16_median 4.83 ns 4.87 ns 10 -lstringa<16> copy{str_with_len_N};/16_stddev 0.077 ns 0.073 ns 10 -lstringa<16> copy{str_with_len_N};/16_cv 1.59 % 1.51 % 10 -lstringa<16> copy{str_with_len_N};/23_mean 4.89 ns 4.85 ns 10 -lstringa<16> copy{str_with_len_N};/23_median 4.88 ns 4.87 ns 10 -lstringa<16> copy{str_with_len_N};/23_stddev 0.055 ns 0.080 ns 10 -lstringa<16> copy{str_with_len_N};/23_cv 1.12 % 1.64 % 10 -lstringa<16> copy{str_with_len_N};/24_mean 83.5 ns 82.5 ns 10 -lstringa<16> copy{str_with_len_N};/24_median 83.0 ns 82.0 ns 10 -lstringa<16> copy{str_with_len_N};/24_stddev 2.42 ns 2.18 ns 10 -lstringa<16> copy{str_with_len_N};/24_cv 2.90 % 2.65 % 10 -lstringa<16> copy{str_with_len_N};/32_mean 85.8 ns 85.4 ns 10 -lstringa<16> copy{str_with_len_N};/32_median 84.3 ns 83.7 ns 10 -lstringa<16> copy{str_with_len_N};/32_stddev 4.76 ns 5.20 ns 10 -lstringa<16> copy{str_with_len_N};/32_cv 5.54 % 6.08 % 10 -lstringa<16> copy{str_with_len_N};/64_mean 81.4 ns 80.9 ns 10 -lstringa<16> copy{str_with_len_N};/64_median 81.8 ns 81.1 ns 10 -lstringa<16> copy{str_with_len_N};/64_stddev 1.99 ns 1.68 ns 10 -lstringa<16> copy{str_with_len_N};/64_cv 2.44 % 2.08 % 10 -lstringa<16> copy{str_with_len_N};/128_mean 84.3 ns 82.8 ns 10 -lstringa<16> copy{str_with_len_N};/128_median 83.9 ns 82.8 ns 10 -lstringa<16> copy{str_with_len_N};/128_stddev 3.17 ns 2.99 ns 10 -lstringa<16> copy{str_with_len_N};/128_cv 3.76 % 3.61 % 10 -lstringa<16> copy{str_with_len_N};/256_mean 85.1 ns 85.1 ns 10 -lstringa<16> copy{str_with_len_N};/256_median 84.5 ns 85.4 ns 10 -lstringa<16> copy{str_with_len_N};/256_stddev 2.13 ns 1.98 ns 10 -lstringa<16> copy{str_with_len_N};/256_cv 2.51 % 2.33 % 10 -lstringa<16> copy{str_with_len_N};/512_mean 89.0 ns 88.9 ns 10 -lstringa<16> copy{str_with_len_N};/512_median 87.4 ns 87.2 ns 10 -lstringa<16> copy{str_with_len_N};/512_stddev 5.89 ns 5.75 ns 10 -lstringa<16> copy{str_with_len_N};/512_cv 6.62 % 6.47 % 10 -lstringa<16> copy{str_with_len_N};/1024_mean 99.5 ns 99.0 ns 10 -lstringa<16> copy{str_with_len_N};/1024_median 97.4 ns 96.3 ns 10 -lstringa<16> copy{str_with_len_N};/1024_stddev 4.93 ns 4.53 ns 10 -lstringa<16> copy{str_with_len_N};/1024_cv 4.96 % 4.57 % 10 -lstringa<16> copy{str_with_len_N};/2048_mean 132 ns 130 ns 10 -lstringa<16> copy{str_with_len_N};/2048_median 130 ns 129 ns 10 -lstringa<16> copy{str_with_len_N};/2048_stddev 3.80 ns 3.05 ns 10 -lstringa<16> copy{str_with_len_N};/2048_cv 2.88 % 2.34 % 10 -lstringa<16> copy{str_with_len_N};/4096_mean 195 ns 194 ns 10 -lstringa<16> copy{str_with_len_N};/4096_median 195 ns 193 ns 10 -lstringa<16> copy{str_with_len_N};/4096_stddev 2.91 ns 3.97 ns 10 -lstringa<16> copy{str_with_len_N};/4096_cv 1.49 % 2.05 % 10 -lstringa<512> copy{str_with_len_N};/15_mean 5.57 ns 5.55 ns 10 -lstringa<512> copy{str_with_len_N};/15_median 5.56 ns 5.62 ns 10 -lstringa<512> copy{str_with_len_N};/15_stddev 0.097 ns 0.110 ns 10 -lstringa<512> copy{str_with_len_N};/15_cv 1.73 % 1.99 % 10 -lstringa<512> copy{str_with_len_N};/16_mean 5.69 ns 5.66 ns 10 -lstringa<512> copy{str_with_len_N};/16_median 5.63 ns 5.58 ns 10 -lstringa<512> copy{str_with_len_N};/16_stddev 0.225 ns 0.188 ns 10 -lstringa<512> copy{str_with_len_N};/16_cv 3.95 % 3.32 % 10 -lstringa<512> copy{str_with_len_N};/23_mean 5.60 ns 5.58 ns 10 -lstringa<512> copy{str_with_len_N};/23_median 5.63 ns 5.58 ns 10 -lstringa<512> copy{str_with_len_N};/23_stddev 0.105 ns 0.066 ns 10 -lstringa<512> copy{str_with_len_N};/23_cv 1.87 % 1.18 % 10 -lstringa<512> copy{str_with_len_N};/24_mean 5.59 ns 5.58 ns 10 -lstringa<512> copy{str_with_len_N};/24_median 5.60 ns 5.58 ns 10 -lstringa<512> copy{str_with_len_N};/24_stddev 0.075 ns 0.093 ns 10 -lstringa<512> copy{str_with_len_N};/24_cv 1.35 % 1.67 % 10 -lstringa<512> copy{str_with_len_N};/32_mean 8.48 ns 8.43 ns 10 -lstringa<512> copy{str_with_len_N};/32_median 8.48 ns 8.37 ns 10 -lstringa<512> copy{str_with_len_N};/32_stddev 0.137 ns 0.141 ns 10 -lstringa<512> copy{str_with_len_N};/32_cv 1.61 % 1.67 % 10 -lstringa<512> copy{str_with_len_N};/64_mean 8.74 ns 8.58 ns 10 -lstringa<512> copy{str_with_len_N};/64_median 8.62 ns 8.58 ns 10 -lstringa<512> copy{str_with_len_N};/64_stddev 0.367 ns 0.140 ns 10 -lstringa<512> copy{str_with_len_N};/64_cv 4.20 % 1.63 % 10 -lstringa<512> copy{str_with_len_N};/128_mean 8.99 ns 8.94 ns 10 -lstringa<512> copy{str_with_len_N};/128_median 8.96 ns 9.00 ns 10 -lstringa<512> copy{str_with_len_N};/128_stddev 0.220 ns 0.199 ns 10 -lstringa<512> copy{str_with_len_N};/128_cv 2.45 % 2.22 % 10 -lstringa<512> copy{str_with_len_N};/256_mean 10.1 ns 10.0 ns 10 -lstringa<512> copy{str_with_len_N};/256_median 10.0 ns 10.0 ns 10 -lstringa<512> copy{str_with_len_N};/256_stddev 0.247 ns 0.197 ns 10 -lstringa<512> copy{str_with_len_N};/256_cv 2.45 % 1.96 % 10 -lstringa<512> copy{str_with_len_N};/512_mean 11.8 ns 11.6 ns 10 -lstringa<512> copy{str_with_len_N};/512_median 11.7 ns 11.5 ns 10 -lstringa<512> copy{str_with_len_N};/512_stddev 0.325 ns 0.206 ns 10 -lstringa<512> copy{str_with_len_N};/512_cv 2.75 % 1.78 % 10 -lstringa<512> copy{str_with_len_N};/1024_mean 99.4 ns 99.1 ns 10 -lstringa<512> copy{str_with_len_N};/1024_median 97.7 ns 97.7 ns 10 -lstringa<512> copy{str_with_len_N};/1024_stddev 4.44 ns 5.66 ns 10 -lstringa<512> copy{str_with_len_N};/1024_cv 4.47 % 5.71 % 10 -lstringa<512> copy{str_with_len_N};/2048_mean 133 ns 133 ns 10 -lstringa<512> copy{str_with_len_N};/2048_median 132 ns 133 ns 10 -lstringa<512> copy{str_with_len_N};/2048_stddev 6.58 ns 6.87 ns 10 -lstringa<512> copy{str_with_len_N};/2048_cv 4.95 % 5.18 % 10 -lstringa<512> copy{str_with_len_N};/4096_mean 196 ns 195 ns 10 -lstringa<512> copy{str_with_len_N};/4096_median 196 ns 193 ns 10 -lstringa<512> copy{str_with_len_N};/4096_stddev 5.23 ns 2.96 ns 10 -lstringa<512> copy{str_with_len_N};/4096_cv 2.67 % 1.52 % 10 ------ Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 32.5 ns 31.7 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 31.9 ns 31.5 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 1.54 ns 0.927 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 4.73 % 2.93 % 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 13.8 ns 13.7 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 13.8 ns 13.8 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.262 ns 0.288 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 1.90 % 2.10 % 10 -stringa s = "123456789"; int res = s.to_int_mean 13.3 ns 13.2 ns 10 -stringa s = "123456789"; int res = s.to_int_median 13.3 ns 13.3 ns 10 -stringa s = "123456789"; int res = s.to_int_stddev 0.207 ns 0.270 ns 10 -stringa s = "123456789"; int res = s.to_int_cv 1.55 % 2.04 % 10 -ssa s = "123456789"; int res = s.to_int_mean 13.0 ns 13.0 ns 10 -ssa s = "123456789"; int res = s.to_int_median 13.1 ns 13.0 ns 10 -ssa s = "123456789"; int res = s.to_int_stddev 0.137 ns 0.237 ns 10 -ssa s = "123456789"; int res = s.to_int_cv 1.05 % 1.83 % 10 -lstringa<20> s = "123456789"; int res = s.to_int_mean 13.2 ns 13.2 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_median 13.3 ns 13.2 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.184 ns 0.232 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_cv 1.40 % 1.76 % 10 ------ Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 34.4 ns 34.4 ns 10 +stringa copy{str_with_len_N};/4096_stddev 0.074 ns 0.235 ns 10 +stringa copy{str_with_len_N};/4096_cv 0.47 % 1.49 % 10 +lstringa<16> copy{str_with_len_N};/15_mean 4.96 ns 4.94 ns 10 +lstringa<16> copy{str_with_len_N};/15_median 4.93 ns 4.92 ns 10 +lstringa<16> copy{str_with_len_N};/15_stddev 0.114 ns 0.138 ns 10 +lstringa<16> copy{str_with_len_N};/15_cv 2.29 % 2.79 % 10 +lstringa<16> copy{str_with_len_N};/16_mean 4.87 ns 4.85 ns 10 +lstringa<16> copy{str_with_len_N};/16_median 4.91 ns 4.87 ns 10 +lstringa<16> copy{str_with_len_N};/16_stddev 0.137 ns 0.108 ns 10 +lstringa<16> copy{str_with_len_N};/16_cv 2.81 % 2.21 % 10 +lstringa<16> copy{str_with_len_N};/23_mean 4.98 ns 4.96 ns 10 +lstringa<16> copy{str_with_len_N};/23_median 4.94 ns 4.97 ns 10 +lstringa<16> copy{str_with_len_N};/23_stddev 0.096 ns 0.129 ns 10 +lstringa<16> copy{str_with_len_N};/23_cv 1.93 % 2.61 % 10 +lstringa<16> copy{str_with_len_N};/24_mean 84.0 ns 83.9 ns 10 +lstringa<16> copy{str_with_len_N};/24_median 83.8 ns 83.7 ns 10 +lstringa<16> copy{str_with_len_N};/24_stddev 2.44 ns 1.53 ns 10 +lstringa<16> copy{str_with_len_N};/24_cv 2.91 % 1.82 % 10 +lstringa<16> copy{str_with_len_N};/32_mean 88.0 ns 87.2 ns 10 +lstringa<16> copy{str_with_len_N};/32_median 87.9 ns 87.2 ns 10 +lstringa<16> copy{str_with_len_N};/32_stddev 2.59 ns 2.01 ns 10 +lstringa<16> copy{str_with_len_N};/32_cv 2.94 % 2.31 % 10 +lstringa<16> copy{str_with_len_N};/64_mean 84.8 ns 84.6 ns 10 +lstringa<16> copy{str_with_len_N};/64_median 84.0 ns 83.7 ns 10 +lstringa<16> copy{str_with_len_N};/64_stddev 2.97 ns 2.76 ns 10 +lstringa<16> copy{str_with_len_N};/64_cv 3.50 % 3.26 % 10 +lstringa<16> copy{str_with_len_N};/128_mean 85.1 ns 84.4 ns 10 +lstringa<16> copy{str_with_len_N};/128_median 85.4 ns 83.7 ns 10 +lstringa<16> copy{str_with_len_N};/128_stddev 1.92 ns 1.87 ns 10 +lstringa<16> copy{str_with_len_N};/128_cv 2.25 % 2.22 % 10 +lstringa<16> copy{str_with_len_N};/256_mean 88.2 ns 87.3 ns 10 +lstringa<16> copy{str_with_len_N};/256_median 87.0 ns 85.8 ns 10 +lstringa<16> copy{str_with_len_N};/256_stddev 3.01 ns 2.62 ns 10 +lstringa<16> copy{str_with_len_N};/256_cv 3.41 % 3.00 % 10 +lstringa<16> copy{str_with_len_N};/512_mean 89.4 ns 89.1 ns 10 +lstringa<16> copy{str_with_len_N};/512_median 89.5 ns 88.9 ns 10 +lstringa<16> copy{str_with_len_N};/512_stddev 1.33 ns 1.53 ns 10 +lstringa<16> copy{str_with_len_N};/512_cv 1.48 % 1.71 % 10 +lstringa<16> copy{str_with_len_N};/1024_mean 101 ns 100 ns 10 +lstringa<16> copy{str_with_len_N};/1024_median 100 ns 99.4 ns 10 +lstringa<16> copy{str_with_len_N};/1024_stddev 4.92 ns 4.78 ns 10 +lstringa<16> copy{str_with_len_N};/1024_cv 4.89 % 4.77 % 10 +lstringa<16> copy{str_with_len_N};/2048_mean 131 ns 130 ns 10 +lstringa<16> copy{str_with_len_N};/2048_median 129 ns 129 ns 10 +lstringa<16> copy{str_with_len_N};/2048_stddev 5.79 ns 4.73 ns 10 +lstringa<16> copy{str_with_len_N};/2048_cv 4.42 % 3.64 % 10 +lstringa<16> copy{str_with_len_N};/4096_mean 194 ns 193 ns 10 +lstringa<16> copy{str_with_len_N};/4096_median 193 ns 190 ns 10 +lstringa<16> copy{str_with_len_N};/4096_stddev 8.46 ns 6.50 ns 10 +lstringa<16> copy{str_with_len_N};/4096_cv 4.35 % 3.37 % 10 +lstringa<512> copy{str_with_len_N};/15_mean 4.94 ns 4.89 ns 10 +lstringa<512> copy{str_with_len_N};/15_median 4.86 ns 4.84 ns 10 +lstringa<512> copy{str_with_len_N};/15_stddev 0.198 ns 0.105 ns 10 +lstringa<512> copy{str_with_len_N};/15_cv 4.00 % 2.16 % 10 +lstringa<512> copy{str_with_len_N};/16_mean 5.36 ns 5.36 ns 10 +lstringa<512> copy{str_with_len_N};/16_median 5.22 ns 5.23 ns 10 +lstringa<512> copy{str_with_len_N};/16_stddev 0.444 ns 0.442 ns 10 +lstringa<512> copy{str_with_len_N};/16_cv 8.29 % 8.25 % 10 +lstringa<512> copy{str_with_len_N};/23_mean 5.05 ns 5.05 ns 10 +lstringa<512> copy{str_with_len_N};/23_median 4.92 ns 4.87 ns 10 +lstringa<512> copy{str_with_len_N};/23_stddev 0.343 ns 0.371 ns 10 +lstringa<512> copy{str_with_len_N};/23_cv 6.79 % 7.35 % 10 +lstringa<512> copy{str_with_len_N};/24_mean 4.83 ns 4.79 ns 10 +lstringa<512> copy{str_with_len_N};/24_median 4.81 ns 4.74 ns 10 +lstringa<512> copy{str_with_len_N};/24_stddev 0.153 ns 0.162 ns 10 +lstringa<512> copy{str_with_len_N};/24_cv 3.17 % 3.38 % 10 +lstringa<512> copy{str_with_len_N};/32_mean 7.94 ns 7.85 ns 10 +lstringa<512> copy{str_with_len_N};/32_median 7.84 ns 7.85 ns 10 +lstringa<512> copy{str_with_len_N};/32_stddev 0.269 ns 0.201 ns 10 +lstringa<512> copy{str_with_len_N};/32_cv 3.38 % 2.57 % 10 +lstringa<512> copy{str_with_len_N};/64_mean 7.92 ns 7.90 ns 10 +lstringa<512> copy{str_with_len_N};/64_median 7.92 ns 7.85 ns 10 +lstringa<512> copy{str_with_len_N};/64_stddev 0.170 ns 0.202 ns 10 +lstringa<512> copy{str_with_len_N};/64_cv 2.15 % 2.56 % 10 +lstringa<512> copy{str_with_len_N};/128_mean 8.26 ns 8.20 ns 10 +lstringa<512> copy{str_with_len_N};/128_median 8.28 ns 8.20 ns 10 +lstringa<512> copy{str_with_len_N};/128_stddev 0.103 ns 0.164 ns 10 +lstringa<512> copy{str_with_len_N};/128_cv 1.24 % 2.01 % 10 +lstringa<512> copy{str_with_len_N};/256_mean 9.31 ns 9.25 ns 10 +lstringa<512> copy{str_with_len_N};/256_median 9.35 ns 9.21 ns 10 +lstringa<512> copy{str_with_len_N};/256_stddev 0.178 ns 0.165 ns 10 +lstringa<512> copy{str_with_len_N};/256_cv 1.91 % 1.78 % 10 +lstringa<512> copy{str_with_len_N};/512_mean 10.9 ns 10.9 ns 10 +lstringa<512> copy{str_with_len_N};/512_median 10.9 ns 11.0 ns 10 +lstringa<512> copy{str_with_len_N};/512_stddev 0.211 ns 0.206 ns 10 +lstringa<512> copy{str_with_len_N};/512_cv 1.93 % 1.89 % 10 +lstringa<512> copy{str_with_len_N};/1024_mean 99.0 ns 98.8 ns 10 +lstringa<512> copy{str_with_len_N};/1024_median 99.0 ns 98.4 ns 10 +lstringa<512> copy{str_with_len_N};/1024_stddev 2.55 ns 2.93 ns 10 +lstringa<512> copy{str_with_len_N};/1024_cv 2.58 % 2.96 % 10 +lstringa<512> copy{str_with_len_N};/2048_mean 131 ns 129 ns 10 +lstringa<512> copy{str_with_len_N};/2048_median 129 ns 128 ns 10 +lstringa<512> copy{str_with_len_N};/2048_stddev 4.28 ns 4.59 ns 10 +lstringa<512> copy{str_with_len_N};/2048_cv 3.27 % 3.55 % 10 +lstringa<512> copy{str_with_len_N};/4096_mean 191 ns 191 ns 10 +lstringa<512> copy{str_with_len_N};/4096_median 188 ns 188 ns 10 +lstringa<512> copy{str_with_len_N};/4096_stddev 9.77 ns 10.7 ns 10 +lstringa<512> copy{str_with_len_N};/4096_cv 5.12 % 5.59 % 10 +----- Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 31.7 ns 31.7 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 31.3 ns 31.4 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 0.742 ns 0.819 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 2.34 % 2.59 % 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 13.9 ns 13.9 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 14.0 ns 13.8 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.275 ns 0.212 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 1.97 % 1.52 % 10 +stringa s = "123456789"; int res = s.to_int_mean 14.3 ns 14.2 ns 10 +stringa s = "123456789"; int res = s.to_int_median 14.2 ns 14.1 ns 10 +stringa s = "123456789"; int res = s.to_int_stddev 0.300 ns 0.199 ns 10 +stringa s = "123456789"; int res = s.to_int_cv 2.09 % 1.40 % 10 +ssa s = "123456789"; int res = s.to_int_mean 13.0 ns 12.9 ns 10 +ssa s = "123456789"; int res = s.to_int_median 13.0 ns 13.1 ns 10 +ssa s = "123456789"; int res = s.to_int_stddev 0.259 ns 0.399 ns 10 +ssa s = "123456789"; int res = s.to_int_cv 1.99 % 3.08 % 10 +lstringa<20> s = "123456789"; int res = s.to_int_mean 13.4 ns 13.4 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_median 13.4 ns 13.4 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.213 ns 0.206 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_cv 1.59 % 1.54 % 10 +----- Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 34.5 ns 34.4 ns 10 std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 34.3 ns 34.1 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 0.621 ns 0.883 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 1.80 % 2.57 % 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 8.29 ns 8.28 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 8.31 ns 8.28 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.097 ns 0.148 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 1.17 % 1.79 % 10 -stringa s = "abcDef"; int res = s.to_int_mean 11.4 ns 11.4 ns 10 -stringa s = "abcDef"; int res = s.to_int_median 11.3 ns 11.4 ns 10 -stringa s = "abcDef"; int res = s.to_int_stddev 0.296 ns 0.327 ns 10 -stringa s = "abcDef"; int res = s.to_int_cv 2.59 % 2.86 % 10 -ssa s = "abcDef"; int res = s.to_int_mean 10.8 ns 10.7 ns 10 -ssa s = "abcDef"; int res = s.to_int_median 10.7 ns 10.7 ns 10 -ssa s = "abcDef"; int res = s.to_int_stddev 0.205 ns 0.230 ns 10 -ssa s = "abcDef"; int res = s.to_int_cv 1.91 % 2.14 % 10 -lstringa<20> s = "abcDef"; int res = s.to_int_mean 11.2 ns 11.1 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_median 11.2 ns 11.0 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.125 ns 0.262 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_cv 1.12 % 2.37 % 10 ------ Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 44.2 ns 43.9 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 43.9 ns 43.9 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 0.886 ns 1.22 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 2.01 % 2.77 % 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 18.8 ns 18.6 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 18.6 ns 18.6 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 0.412 ns 0.293 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 2.20 % 1.57 % 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 15.9 ns 15.8 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 15.9 ns 16.0 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.196 ns 0.294 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 1.23 % 1.86 % 10 --- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << "abbaabbaabbaabba";_mean 7392 ns 7366 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_median 7379 ns 7324 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 138 ns 195 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_cv 1.87 % 2.65 % 10 -std::string str; ... str += "abbaabbaabbaabba";_mean 1068 ns 1060 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_median 1067 ns 1050 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_stddev 18.9 ns 26.2 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_cv 1.77 % 2.48 % 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 757 ns 751 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_median 748 ns 753 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 19.1 ns 14.4 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 2.52 % 1.92 % 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 403 ns 399 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_median 391 ns 384 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 33.6 ns 33.1 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 8.34 % 8.29 % 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 229 ns 229 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_median 226 ns 225 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 6.65 ns 7.56 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 2.91 % 3.31 % 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 139 ns 139 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 139 ns 140 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 0.950 ns 1.88 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 0.68 % 1.36 % 10 --- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 6632 ns 6574 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 6640 ns 6539 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 127 ns 144 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 1.92 % 2.18 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 3901 ns 3892 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_median 3899 ns 3934 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 83.7 ns 81.3 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 2.15 % 2.09 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 763 ns 760 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 760 ns 753 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 17.7 ns 14.1 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.32 % 1.86 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 481 ns 473 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 474 ns 474 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 27.4 ns 12.2 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 5.70 % 2.58 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 306 ns 305 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 306 ns 305 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 10.0 ns 10.4 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.28 % 3.40 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 214 ns 213 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 213 ns 212 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 3.83 ns 4.72 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 1.79 % 2.22 % 10 --- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 361900 ns 360695 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 362008 ns 360695 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 8052 ns 8089 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 2.23 % 2.24 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 199378 ns 199655 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 199446 ns 200911 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 3464 ns 4434 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.74 % 2.22 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 19852 ns 19796 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 19976 ns 19880 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 336 ns 443 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.69 % 2.24 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 18215 ns 18164 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 18175 ns 18206 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 300 ns 293 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.65 % 1.61 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 17973 ns 17955 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 17963 ns 17997 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 396 ns 461 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.20 % 2.57 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 17891 ns 17746 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 17888 ns 17788 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 237 ns 404 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.33 % 2.28 % 10 --- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var1 << str_var2;_mean 6383 ns 6344 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_median 6406 ns 6406 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_stddev 115 ns 132 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_cv 1.80 % 2.08 % 10 -std::string str; ... str += str_var1 + str_var2;_mean 3986 ns 3993 ns 10 -std::string str; ... str += str_var1 + str_var2;_median 3990 ns 3984 ns 10 -std::string str; ... str += str_var1 + str_var2;_stddev 64.6 ns 62.6 ns 10 -std::string str; ... str += str_var1 + str_var2;_cv 1.62 % 1.57 % 10 -lstringa<16> str; ... str += str_var1 + str_var2;_mean 859 ns 856 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_median 846 ns 858 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_stddev 42.3 ns 40.0 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_cv 4.92 % 4.67 % 10 -lstringa<128> str; ... str += str_var1 + str_var2;_mean 569 ns 568 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_median 562 ns 558 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_stddev 25.2 ns 24.7 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_cv 4.42 % 4.34 % 10 -lstringa<512> str; ... str += str_var1 + str_var2;_mean 403 ns 400 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_median 401 ns 399 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_stddev 5.68 ns 6.69 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_cv 1.41 % 1.67 % 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_mean 314 ns 310 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_median 311 ns 307 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 15.1 ns 8.19 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_cv 4.80 % 2.64 % 10 --- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; str << "test = " << k << " times";_mean 11663 ns 11597 ns 10 -std::stringstream str; str << "test = " << k << " times";_median 11672 ns 11597 ns 10 -std::stringstream str; str << "test = " << k << " times";_stddev 126 ns 129 ns 10 -std::stringstream str; str << "test = " << k << " times";_cv 1.08 % 1.11 % 10 -std::string str = "test = " + std::to_string(k) + " times";_mean 1114 ns 1110 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_median 1113 ns 1116 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_stddev 23.9 ns 22.0 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_cv 2.14 % 1.98 % 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 2906 ns 2876 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 2888 ns 2849 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 81.9 ns 71.2 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 2.82 % 2.48 % 10 -std::string str = std::format("test = {} times", k);_mean 1950 ns 1941 ns 10 -std::string str = std::format("test = {} times", k);_median 1942 ns 1904 ns 10 -std::string str = std::format("test = {} times", k);_stddev 57.0 ns 66.9 ns 10 -std::string str = std::format("test = {} times", k);_cv 2.92 % 3.45 % 10 -lstringa<8> str; str.format("test = {} times", k);_mean 2112 ns 2086 ns 10 -lstringa<8> str; str.format("test = {} times", k);_median 2107 ns 2086 ns 10 -lstringa<8> str; str.format("test = {} times", k);_stddev 28.2 ns 37.0 ns 10 -lstringa<8> str; str.format("test = {} times", k);_cv 1.33 % 1.77 % 10 -lstringa<32> str; str.format("test = {} times", k);_mean 1029 ns 1027 ns 10 -lstringa<32> str; str.format("test = {} times", k);_median 1031 ns 1036 ns 10 -lstringa<32> str; str.format("test = {} times", k);_stddev 22.3 ns 20.8 ns 10 -lstringa<32> str; str.format("test = {} times", k);_cv 2.17 % 2.03 % 10 -lstringa<8> str = "test = " + k + " times";_mean 823 ns 821 ns 10 -lstringa<8> str = "test = " + k + " times";_median 824 ns 820 ns 10 -lstringa<8> str = "test = " + k + " times";_stddev 20.8 ns 20.9 ns 10 -lstringa<8> str = "test = " + k + " times";_cv 2.53 % 2.54 % 10 -lstringa<32> str = "test = " + k + " times";_mean 160 ns 156 ns 10 -lstringa<32> str = "test = " + k + " times";_median 158 ns 155 ns 10 -lstringa<32> str = "test = " + k + " times";_stddev 6.73 ns 6.16 ns 10 -lstringa<32> str = "test = " + k + " times";_cv 4.21 % 3.95 % 10 -stringa str = "test = " + k + " times";_mean 156 ns 155 ns 10 -stringa str = "test = " + k + " times";_median 155 ns 153 ns 10 -stringa str = "test = " + k + " times";_stddev 4.05 ns 3.69 ns 10 -stringa str = "test = " + k + " times";_cv 2.60 % 2.39 % 10 --- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find + substr + std::strtol_mean 576 ns 573 ns 10 -std::string::find + substr + std::strtol_median 574 ns 572 ns 10 -std::string::find + substr + std::strtol_stddev 9.17 ns 12.2 ns 10 -std::string::find + substr + std::strtol_cv 1.59 % 2.13 % 10 -ssa::splitter + ssa::as_int_mean 173 ns 171 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 1.05 ns 1.09 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 3.05 % 3.17 % 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 8.49 ns 8.49 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 8.36 ns 8.37 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.358 ns 0.339 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 4.22 % 4.00 % 10 +stringa s = "abcDef"; int res = s.to_int_mean 12.3 ns 12.3 ns 10 +stringa s = "abcDef"; int res = s.to_int_median 12.3 ns 12.3 ns 10 +stringa s = "abcDef"; int res = s.to_int_stddev 0.225 ns 0.277 ns 10 +stringa s = "abcDef"; int res = s.to_int_cv 1.82 % 2.25 % 10 +ssa s = "abcDef"; int res = s.to_int_mean 12.0 ns 12.0 ns 10 +ssa s = "abcDef"; int res = s.to_int_median 12.0 ns 12.0 ns 10 +ssa s = "abcDef"; int res = s.to_int_stddev 0.244 ns 0.334 ns 10 +ssa s = "abcDef"; int res = s.to_int_cv 2.03 % 2.79 % 10 +lstringa<20> s = "abcDef"; int res = s.to_int_mean 11.8 ns 11.8 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_median 11.8 ns 11.7 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.236 ns 0.232 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_cv 2.00 % 1.96 % 10 +----- Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 44.1 ns 44.1 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 44.3 ns 44.3 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 0.602 ns 0.596 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 1.37 % 1.35 % 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 17.2 ns 17.1 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 17.1 ns 17.1 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 0.253 ns 0.384 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 1.48 % 2.24 % 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 16.6 ns 16.6 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 16.7 ns 16.7 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.317 ns 0.294 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 1.91 % 1.77 % 10 +----- Convert to double '1234.567e10' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_mean 103 ns 103 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_median 102 ns 101 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_stddev 7.72 ns 7.23 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_cv 7.50 % 7.03 % 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_mean 62.8 ns 62.4 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_median 62.5 ns 62.8 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_stddev 1.33 ns 0.942 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_cv 2.11 % 1.51 % 10 +ssa s = "1234.567e10"; double res = *s.to_double()_mean 35.7 ns 35.5 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_median 35.7 ns 35.3 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_stddev 0.654 ns 0.930 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_cv 1.83 % 2.62 % 10 +-- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << "abbaabbaabbaabba";_mean 4774 ns 4764 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_median 4766 ns 4754 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 89.3 ns 111 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_cv 1.87 % 2.34 % 10 +std::string str; ... str += "abbaabbaabbaabba";_mean 1084 ns 1084 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_median 1077 ns 1074 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_stddev 40.2 ns 36.8 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_cv 3.71 % 3.39 % 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 767 ns 760 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_median 770 ns 767 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 14.5 ns 18.7 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 1.88 % 2.47 % 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 391 ns 388 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_median 391 ns 391 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 7.56 ns 8.65 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 1.93 % 2.23 % 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 246 ns 244 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_median 246 ns 246 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 3.78 ns 5.29 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 1.54 % 2.17 % 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 154 ns 154 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 155 ns 153 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 1.31 ns 2.75 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 0.84 % 1.78 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 4816 ns 4792 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 4636 ns 4604 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 332 ns 330 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 6.89 % 6.89 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 3968 ns 3964 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_median 3901 ns 3908 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 208 ns 201 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 5.25 % 5.06 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 796 ns 795 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 784 ns 785 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 42.4 ns 41.3 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 5.33 % 5.19 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 492 ns 488 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 495 ns 497 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 12.2 ns 13.9 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.48 % 2.85 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 315 ns 313 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 312 ns 315 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 6.54 ns 8.32 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.08 % 2.65 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 216 ns 216 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 215 ns 213 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 6.84 ns 7.47 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.16 % 3.46 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 219773 ns 219238 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 220812 ns 219727 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 3604 ns 4275 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 1.64 % 1.95 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 193770 ns 192540 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 193717 ns 192540 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 2500 ns 3418 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.29 % 1.77 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 19446 ns 19378 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 19194 ns 19043 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 875 ns 861 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 4.50 % 4.44 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 19410 ns 19088 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 19386 ns 19043 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 999 ns 543 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 5.15 % 2.84 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 18772 ns 18725 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 18677 ns 18589 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 425 ns 526 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.26 % 2.81 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 18557 ns 18492 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 18539 ns 18415 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 386 ns 566 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.08 % 3.06 % 10 +-- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var1 << str_var2;_mean 4503 ns 4489 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_median 4429 ns 4395 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_stddev 216 ns 234 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_cv 4.79 % 5.21 % 10 +std::string str; ... str += str_var1 + str_var2;_mean 4062 ns 4037 ns 10 +std::string str; ... str += str_var1 + str_var2;_median 4023 ns 4011 ns 10 +std::string str; ... str += str_var1 + str_var2;_stddev 89.1 ns 71.8 ns 10 +std::string str; ... str += str_var1 + str_var2;_cv 2.19 % 1.78 % 10 +lstringa<16> str; ... str += str_var1 + str_var2;_mean 842 ns 841 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_median 840 ns 837 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_stddev 16.3 ns 19.2 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_cv 1.94 % 2.29 % 10 +lstringa<128> str; ... str += str_var1 + str_var2;_mean 546 ns 543 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_median 539 ns 530 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_stddev 22.6 ns 22.3 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_cv 4.14 % 4.10 % 10 +lstringa<512> str; ... str += str_var1 + str_var2;_mean 416 ns 414 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_median 412 ns 417 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_stddev 13.2 ns 14.9 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_cv 3.18 % 3.61 % 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_mean 311 ns 308 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_median 312 ns 302 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 16.6 ns 16.9 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_cv 5.34 % 5.48 % 10 +-- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; str << "test = " << k << " times";_mean 10976 ns 10938 ns 10 +std::stringstream str; str << "test = " << k << " times";_median 10884 ns 10882 ns 10 +std::stringstream str; str << "test = " << k << " times";_stddev 376 ns 412 ns 10 +std::stringstream str; str << "test = " << k << " times";_cv 3.43 % 3.76 % 10 +std::string str = "test = " + std::to_string(k) + " times";_mean 1131 ns 1116 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_median 1123 ns 1111 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_stddev 33.9 ns 25.9 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_cv 3.00 % 2.32 % 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 2941 ns 2900 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 2909 ns 2888 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 110 ns 64.8 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 3.75 % 2.24 % 10 +std::string str = std::format("test = {} times", k);_mean 2082 ns 1995 ns 10 +std::string str = std::format("test = {} times", k);_median 1996 ns 1976 ns 10 +std::string str = std::format("test = {} times", k);_stddev 203 ns 80.9 ns 10 +std::string str = std::format("test = {} times", k);_cv 9.77 % 4.05 % 10 +lstringa<8> str; str.format("test = {} times", k);_mean 2137 ns 2126 ns 10 +lstringa<8> str; str.format("test = {} times", k);_median 2118 ns 2131 ns 10 +lstringa<8> str; str.format("test = {} times", k);_stddev 54.9 ns 45.1 ns 10 +lstringa<8> str; str.format("test = {} times", k);_cv 2.57 % 2.12 % 10 +lstringa<32> str; str.format("test = {} times", k);_mean 1004 ns 994 ns 10 +lstringa<32> str; str.format("test = {} times", k);_median 994 ns 994 ns 10 +lstringa<32> str; str.format("test = {} times", k);_stddev 29.0 ns 17.8 ns 10 +lstringa<32> str; str.format("test = {} times", k);_cv 2.89 % 1.79 % 10 +lstringa<8> str = "test = " + k + " times";_mean 830 ns 830 ns 10 +lstringa<8> str = "test = " + k + " times";_median 828 ns 820 ns 10 +lstringa<8> str = "test = " + k + " times";_stddev 17.6 ns 18.7 ns 10 +lstringa<8> str = "test = " + k + " times";_cv 2.12 % 2.26 % 10 +lstringa<32> str = "test = " + k + " times";_mean 158 ns 159 ns 10 +lstringa<32> str = "test = " + k + " times";_median 157 ns 157 ns 10 +lstringa<32> str = "test = " + k + " times";_stddev 2.97 ns 2.96 ns 10 +lstringa<32> str = "test = " + k + " times";_cv 1.87 % 1.87 % 10 +stringa str = "test = " + k + " times";_mean 158 ns 157 ns 10 +stringa str = "test = " + k + " times";_median 156 ns 155 ns 10 +stringa str = "test = " + k + " times";_stddev 8.91 ns 8.17 ns 10 +stringa str = "test = " + k + " times";_cv 5.62 % 5.19 % 10 +-- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find + substr + std::strtol_mean 558 ns 557 ns 10 +std::string::find + substr + std::strtol_median 558 ns 558 ns 10 +std::string::find + substr + std::strtol_stddev 10.8 ns 13.9 ns 10 +std::string::find + substr + std::strtol_cv 1.94 % 2.49 % 10 +ssa::splitter + ssa::as_int_mean 171 ns 170 ns 10 ssa::splitter + ssa::as_int_median 172 ns 171 ns 10 -ssa::splitter + ssa::as_int_stddev 3.44 ns 6.07 ns 10 -ssa::splitter + ssa::as_int_cv 1.99 % 3.55 % 10 -ssa::splitf + functor_mean 188 ns 187 ns 10 -ssa::splitf + functor_median 187 ns 186 ns 10 -ssa::splitf + functor_stddev 4.21 ns 5.57 ns 10 -ssa::splitf + functor_cv 2.23 % 2.98 % 10 --- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Naive (and wrong) replace symbols with std::string find + replace_mean 1153 ns 1152 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_median 1163 ns 1160 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_stddev 21.3 ns 22.4 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_cv 1.85 % 1.95 % 10 -replace symbols with std::string find_first_of + replace_mean 2073 ns 2070 ns 10 -replace symbols with std::string find_first_of + replace_median 2069 ns 2051 ns 10 -replace symbols with std::string find_first_of + replace_stddev 48.9 ns 41.2 ns 10 -replace symbols with std::string find_first_of + replace_cv 2.36 % 1.99 % 10 -replace symbols with std::string_view find_first_of + copy_mean 2441 ns 2433 ns 10 -replace symbols with std::string_view find_first_of + copy_median 2447 ns 2455 ns 10 -replace symbols with std::string_view find_first_of + copy_stddev 40.0 ns 47.1 ns 10 -replace symbols with std::string_view find_first_of + copy_cv 1.64 % 1.93 % 10 -replace runtime symbols with string expressions and without remembering all search results_mean 1386 ns 1372 ns 10 -replace runtime symbols with string expressions and without remembering all search results_median 1386 ns 1365 ns 10 -replace runtime symbols with string expressions and without remembering all search results_stddev 27.9 ns 42.0 ns 10 -replace runtime symbols with string expressions and without remembering all search results_cv 2.01 % 3.06 % 10 -replace runtime symbols with simstr and memorization of all search results_mean 1373 ns 1362 ns 10 -replace runtime symbols with simstr and memorization of all search results_median 1367 ns 1381 ns 10 -replace runtime symbols with simstr and memorization of all search results_stddev 67.1 ns 57.7 ns 10 -replace runtime symbols with simstr and memorization of all search results_cv 4.89 % 4.23 % 10 -replace const symbols with string expressions and without remembering all search results_mean 1213 ns 1211 ns 10 -replace const symbols with string expressions and without remembering all search results_median 1210 ns 1200 ns 10 -replace const symbols with string expressions and without remembering all search results_stddev 28.4 ns 19.5 ns 10 -replace const symbols with string expressions and without remembering all search results_cv 2.34 % 1.61 % 10 -replace const symbols with string expressions and memorization of all search results_mean 1228 ns 1203 ns 10 -replace const symbols with string expressions and memorization of all search results_median 1218 ns 1200 ns 10 -replace const symbols with string expressions and memorization of all search results_stddev 38.9 ns 24.4 ns 10 -replace const symbols with string expressions and memorization of all search results_cv 3.17 % 2.03 % 10 --- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Short Naive (and wrong) replace symbols with std::string find + replace_mean 321 ns 319 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_median 322 ns 317 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_stddev 4.92 ns 6.62 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_cv 1.53 % 2.08 % 10 -Short replace symbols with std::string find_first_of + replace_mean 378 ns 377 ns 10 +ssa::splitter + ssa::as_int_stddev 2.80 ns 4.04 ns 10 +ssa::splitter + ssa::as_int_cv 1.64 % 2.38 % 10 +ssa::splitf + functor_mean 190 ns 190 ns 10 +ssa::splitf + functor_median 191 ns 190 ns 10 +ssa::splitf + functor_stddev 6.27 ns 6.91 ns 10 +ssa::splitf + functor_cv 3.30 % 3.64 % 10 +-- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Naive (and wrong) replace symbols with std::string find + replace_mean 1171 ns 1165 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_median 1169 ns 1172 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_stddev 26.2 ns 23.2 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_cv 2.24 % 1.99 % 10 +replace symbols with std::string find_first_of + replace_mean 2063 ns 2049 ns 10 +replace symbols with std::string find_first_of + replace_median 2064 ns 2040 ns 10 +replace symbols with std::string find_first_of + replace_stddev 44.7 ns 46.8 ns 10 +replace symbols with std::string find_first_of + replace_cv 2.17 % 2.28 % 10 +replace symbols with std::string_view find_first_of + copy_mean 2410 ns 2407 ns 10 +replace symbols with std::string_view find_first_of + copy_median 2398 ns 2393 ns 10 +replace symbols with std::string_view find_first_of + copy_stddev 48.0 ns 56.6 ns 10 +replace symbols with std::string_view find_first_of + copy_cv 1.99 % 2.35 % 10 +replace runtime symbols with string expressions and without remembering all search results_mean 1441 ns 1440 ns 10 +replace runtime symbols with string expressions and without remembering all search results_median 1415 ns 1413 ns 10 +replace runtime symbols with string expressions and without remembering all search results_stddev 82.3 ns 80.6 ns 10 +replace runtime symbols with string expressions and without remembering all search results_cv 5.71 % 5.60 % 10 +replace runtime symbols with simstr and memorization of all search results_mean 1396 ns 1390 ns 10 +replace runtime symbols with simstr and memorization of all search results_median 1372 ns 1353 ns 10 +replace runtime symbols with simstr and memorization of all search results_stddev 109 ns 117 ns 10 +replace runtime symbols with simstr and memorization of all search results_cv 7.82 % 8.46 % 10 +replace const symbols with string expressions and without remembering all search results_mean 1209 ns 1205 ns 10 +replace const symbols with string expressions and without remembering all search results_median 1209 ns 1193 ns 10 +replace const symbols with string expressions and without remembering all search results_stddev 21.3 ns 33.7 ns 10 +replace const symbols with string expressions and without remembering all search results_cv 1.76 % 2.80 % 10 +replace const symbols with string expressions and memorization of all search results_mean 1206 ns 1196 ns 10 +replace const symbols with string expressions and memorization of all search results_median 1209 ns 1196 ns 10 +replace const symbols with string expressions and memorization of all search results_stddev 17.2 ns 25.7 ns 10 +replace const symbols with string expressions and memorization of all search results_cv 1.43 % 2.15 % 10 +-- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Short Naive (and wrong) replace symbols with std::string find + replace_mean 331 ns 330 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_median 330 ns 330 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_stddev 6.13 ns 5.98 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_cv 1.85 % 1.81 % 10 +Short replace symbols with std::string find_first_of + replace_mean 375 ns 375 ns 10 Short replace symbols with std::string find_first_of + replace_median 377 ns 377 ns 10 -Short replace symbols with std::string find_first_of + replace_stddev 8.10 ns 11.8 ns 10 -Short replace symbols with std::string find_first_of + replace_cv 2.14 % 3.14 % 10 -Short replace symbols with std::string_view find_first_of + copy_mean 342 ns 340 ns 10 -Short replace symbols with std::string_view find_first_of + copy_median 343 ns 341 ns 10 -Short replace symbols with std::string_view find_first_of + copy_stddev 4.68 ns 6.32 ns 10 -Short replace symbols with std::string_view find_first_of + copy_cv 1.37 % 1.86 % 10 -Short replace runtime symbols with string expressions and without remembering all search results_mean 251 ns 247 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_median 251 ns 246 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_stddev 2.57 ns 5.91 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_cv 1.02 % 2.39 % 10 -Short replace runtime symbols with simstr and memorization of all search results_mean 347 ns 344 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_median 344 ns 344 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_stddev 7.13 ns 6.91 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_cv 2.06 % 2.01 % 10 -Short replace const symbols with string expressions and without remembering all search results_mean 218 ns 217 ns 10 -Short replace const symbols with string expressions and without remembering all search results_median 220 ns 217 ns 10 -Short replace const symbols with string expressions and without remembering all search results_stddev 4.90 ns 5.27 ns 10 -Short replace const symbols with string expressions and without remembering all search results_cv 2.25 % 2.43 % 10 -Short replace const symbols with string expressions and memorization of all search results_mean 301 ns 300 ns 10 -Short replace const symbols with string expressions and memorization of all search results_median 300 ns 300 ns 10 -Short replace const symbols with string expressions and memorization of all search results_stddev 6.51 ns 5.70 ns 10 -Short replace const symbols with string expressions and memorization of all search results_cv 2.16 % 1.90 % 10 ------ Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to ---- in std::string|64_mean 238 ns 237 ns 10 -replace bb to ---- in std::string|64_median 239 ns 238 ns 10 -replace bb to ---- in std::string|64_stddev 4.84 ns 5.54 ns 10 -replace bb to ---- in std::string|64_cv 2.03 % 2.34 % 10 -replace bb to ---- in std::string|256_mean 779 ns 771 ns 10 -replace bb to ---- in std::string|256_median 775 ns 767 ns 10 -replace bb to ---- in std::string|256_stddev 25.1 ns 16.0 ns 10 -replace bb to ---- in std::string|256_cv 3.23 % 2.08 % 10 -replace bb to ---- in std::string|512_mean 1450 ns 1444 ns 10 -replace bb to ---- in std::string|512_median 1452 ns 1430 ns 10 -replace bb to ---- in std::string|512_stddev 29.1 ns 29.4 ns 10 -replace bb to ---- in std::string|512_cv 2.01 % 2.04 % 10 -replace bb to ---- in std::string|1024_mean 3246 ns 3230 ns 10 -replace bb to ---- in std::string|1024_median 3193 ns 3209 ns 10 -replace bb to ---- in std::string|1024_stddev 122 ns 114 ns 10 -replace bb to ---- in std::string|1024_cv 3.76 % 3.53 % 10 -replace bb to ---- in std::string|2048_mean 8153 ns 8057 ns 10 -replace bb to ---- in std::string|2048_median 7974 ns 8022 ns 10 -replace bb to ---- in std::string|2048_stddev 374 ns 257 ns 10 -replace bb to ---- in std::string|2048_cv 4.59 % 3.19 % 10 -replace bb to ---- in lstringa<8>|64_mean 343 ns 342 ns 10 -replace bb to ---- in lstringa<8>|64_median 342 ns 341 ns 10 -replace bb to ---- in lstringa<8>|64_stddev 6.86 ns 5.61 ns 10 -replace bb to ---- in lstringa<8>|64_cv 2.00 % 1.64 % 10 -replace bb to ---- in lstringa<8>|256_mean 645 ns 646 ns 10 -replace bb to ---- in lstringa<8>|256_median 644 ns 642 ns 10 -replace bb to ---- in lstringa<8>|256_stddev 13.7 ns 14.8 ns 10 -replace bb to ---- in lstringa<8>|256_cv 2.12 % 2.29 % 10 -replace bb to ---- in lstringa<8>|512_mean 1080 ns 1072 ns 10 -replace bb to ---- in lstringa<8>|512_median 1078 ns 1074 ns 10 -replace bb to ---- in lstringa<8>|512_stddev 23.2 ns 24.3 ns 10 -replace bb to ---- in lstringa<8>|512_cv 2.14 % 2.27 % 10 -replace bb to ---- in lstringa<8>|1024_mean 1916 ns 1904 ns 10 -replace bb to ---- in lstringa<8>|1024_median 1910 ns 1904 ns 10 -replace bb to ---- in lstringa<8>|1024_stddev 31.6 ns 42.7 ns 10 -replace bb to ---- in lstringa<8>|1024_cv 1.65 % 2.24 % 10 -replace bb to ---- in lstringa<8>|2048_mean 3650 ns 3618 ns 10 -replace bb to ---- in lstringa<8>|2048_median 3650 ns 3610 ns 10 -replace bb to ---- in lstringa<8>|2048_stddev 32.9 ns 59.2 ns 10 -replace bb to ---- in lstringa<8>|2048_cv 0.90 % 1.64 % 10 -replace bb to ---- by init stringa|64_mean 216 ns 216 ns 10 -replace bb to ---- by init stringa|64_median 215 ns 214 ns 10 -replace bb to ---- by init stringa|64_stddev 8.87 ns 8.47 ns 10 -replace bb to ---- by init stringa|64_cv 4.10 % 3.93 % 10 -replace bb to ---- by init stringa|256_mean 548 ns 547 ns 10 -replace bb to ---- by init stringa|256_median 546 ns 547 ns 10 -replace bb to ---- by init stringa|256_stddev 9.01 ns 12.8 ns 10 -replace bb to ---- by init stringa|256_cv 1.64 % 2.33 % 10 -replace bb to ---- by init stringa|512_mean 941 ns 942 ns 10 -replace bb to ---- by init stringa|512_median 942 ns 942 ns 10 -replace bb to ---- by init stringa|512_stddev 22.7 ns 24.2 ns 10 -replace bb to ---- by init stringa|512_cv 2.41 % 2.57 % 10 -replace bb to ---- by init stringa|1024_mean 1775 ns 1765 ns 10 -replace bb to ---- by init stringa|1024_median 1766 ns 1765 ns 10 -replace bb to ---- by init stringa|1024_stddev 33.7 ns 31.3 ns 10 -replace bb to ---- by init stringa|1024_cv 1.90 % 1.77 % 10 -replace bb to ---- by init stringa|2048_mean 3478 ns 3450 ns 10 -replace bb to ---- by init stringa|2048_median 3489 ns 3442 ns 10 -replace bb to ---- by init stringa|2048_stddev 48.5 ns 54.0 ns 10 -replace bb to ---- by init stringa|2048_cv 1.39 % 1.57 % 10 ------ Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to -- in std::string|64_mean 196 ns 195 ns 10 -replace bb to -- in std::string|64_median 196 ns 197 ns 10 -replace bb to -- in std::string|64_stddev 2.59 ns 3.53 ns 10 -replace bb to -- in std::string|64_cv 1.32 % 1.81 % 10 -replace bb to -- in std::string|256_mean 503 ns 500 ns 10 -replace bb to -- in std::string|256_median 501 ns 500 ns 10 -replace bb to -- in std::string|256_stddev 8.11 ns 10.4 ns 10 -replace bb to -- in std::string|256_cv 1.61 % 2.08 % 10 -replace bb to -- in std::string|512_mean 864 ns 861 ns 10 -replace bb to -- in std::string|512_median 868 ns 854 ns 10 -replace bb to -- in std::string|512_stddev 17.6 ns 18.7 ns 10 -replace bb to -- in std::string|512_cv 2.04 % 2.18 % 10 -replace bb to -- in std::string|1024_mean 1700 ns 1684 ns 10 -replace bb to -- in std::string|1024_median 1702 ns 1688 ns 10 -replace bb to -- in std::string|1024_stddev 27.7 ns 28.3 ns 10 -replace bb to -- in std::string|1024_cv 1.63 % 1.68 % 10 -replace bb to -- in std::string|2048_mean 3239 ns 3230 ns 10 -replace bb to -- in std::string|2048_median 3196 ns 3209 ns 10 -replace bb to -- in std::string|2048_stddev 103 ns 123 ns 10 -replace bb to -- in std::string|2048_cv 3.18 % 3.82 % 10 +Short replace symbols with std::string find_first_of + replace_stddev 6.37 ns 9.30 ns 10 +Short replace symbols with std::string find_first_of + replace_cv 1.70 % 2.48 % 10 +Short replace symbols with std::string_view find_first_of + copy_mean 329 ns 325 ns 10 +Short replace symbols with std::string_view find_first_of + copy_median 327 ns 322 ns 10 +Short replace symbols with std::string_view find_first_of + copy_stddev 11.5 ns 10.5 ns 10 +Short replace symbols with std::string_view find_first_of + copy_cv 3.49 % 3.22 % 10 +Short replace runtime symbols with string expressions and without remembering all search results_mean 256 ns 254 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_median 257 ns 254 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_stddev 4.08 ns 3.90 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_cv 1.59 % 1.53 % 10 +Short replace runtime symbols with simstr and memorization of all search results_mean 369 ns 366 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_median 368 ns 360 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_stddev 8.65 ns 8.87 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_cv 2.35 % 2.42 % 10 +Short replace const symbols with string expressions and without remembering all search results_mean 223 ns 223 ns 10 +Short replace const symbols with string expressions and without remembering all search results_median 221 ns 222 ns 10 +Short replace const symbols with string expressions and without remembering all search results_stddev 6.17 ns 7.23 ns 10 +Short replace const symbols with string expressions and without remembering all search results_cv 2.76 % 3.25 % 10 +Short replace const symbols with string expressions and memorization of all search results_mean 310 ns 309 ns 10 +Short replace const symbols with string expressions and memorization of all search results_median 309 ns 305 ns 10 +Short replace const symbols with string expressions and memorization of all search results_stddev 6.82 ns 7.78 ns 10 +Short replace const symbols with string expressions and memorization of all search results_cv 2.20 % 2.52 % 10 +----- Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to ---- in std::string|64_mean 236 ns 235 ns 10 +replace bb to ---- in std::string|64_median 236 ns 235 ns 10 +replace bb to ---- in std::string|64_stddev 4.58 ns 3.86 ns 10 +replace bb to ---- in std::string|64_cv 1.94 % 1.64 % 10 +replace bb to ---- in std::string|256_mean 780 ns 776 ns 10 +replace bb to ---- in std::string|256_median 777 ns 774 ns 10 +replace bb to ---- in std::string|256_stddev 18.4 ns 25.1 ns 10 +replace bb to ---- in std::string|256_cv 2.36 % 3.23 % 10 +replace bb to ---- in std::string|512_mean 1449 ns 1447 ns 10 +replace bb to ---- in std::string|512_median 1454 ns 1465 ns 10 +replace bb to ---- in std::string|512_stddev 34.6 ns 44.3 ns 10 +replace bb to ---- in std::string|512_cv 2.39 % 3.06 % 10 +replace bb to ---- in std::string|1024_mean 3239 ns 3181 ns 10 +replace bb to ---- in std::string|1024_median 3214 ns 3174 ns 10 +replace bb to ---- in std::string|1024_stddev 121 ns 67.4 ns 10 +replace bb to ---- in std::string|1024_cv 3.73 % 2.12 % 10 +replace bb to ---- in std::string|2048_mean 8127 ns 8039 ns 10 +replace bb to ---- in std::string|2048_median 7982 ns 8022 ns 10 +replace bb to ---- in std::string|2048_stddev 355 ns 323 ns 10 +replace bb to ---- in std::string|2048_cv 4.36 % 4.02 % 10 +replace bb to ---- in lstringa<8>|64_mean 336 ns 333 ns 10 +replace bb to ---- in lstringa<8>|64_median 331 ns 330 ns 10 +replace bb to ---- in lstringa<8>|64_stddev 18.4 ns 17.0 ns 10 +replace bb to ---- in lstringa<8>|64_cv 5.48 % 5.10 % 10 +replace bb to ---- in lstringa<8>|256_mean 659 ns 657 ns 10 +replace bb to ---- in lstringa<8>|256_median 648 ns 642 ns 10 +replace bb to ---- in lstringa<8>|256_stddev 43.6 ns 46.7 ns 10 +replace bb to ---- in lstringa<8>|256_cv 6.62 % 7.11 % 10 +replace bb to ---- in lstringa<8>|512_mean 1091 ns 1085 ns 10 +replace bb to ---- in lstringa<8>|512_median 1089 ns 1088 ns 10 +replace bb to ---- in lstringa<8>|512_stddev 22.5 ns 20.6 ns 10 +replace bb to ---- in lstringa<8>|512_cv 2.06 % 1.90 % 10 +replace bb to ---- in lstringa<8>|1024_mean 1937 ns 1919 ns 10 +replace bb to ---- in lstringa<8>|1024_median 1939 ns 1929 ns 10 +replace bb to ---- in lstringa<8>|1024_stddev 27.5 ns 51.7 ns 10 +replace bb to ---- in lstringa<8>|1024_cv 1.42 % 2.70 % 10 +replace bb to ---- in lstringa<8>|2048_mean 3647 ns 3633 ns 10 +replace bb to ---- in lstringa<8>|2048_median 3640 ns 3599 ns 10 +replace bb to ---- in lstringa<8>|2048_stddev 64.1 ns 70.6 ns 10 +replace bb to ---- in lstringa<8>|2048_cv 1.76 % 1.94 % 10 +replace bb to ---- by init stringa|64_mean 212 ns 210 ns 10 +replace bb to ---- by init stringa|64_median 212 ns 209 ns 10 +replace bb to ---- by init stringa|64_stddev 3.40 ns 4.30 ns 10 +replace bb to ---- by init stringa|64_cv 1.60 % 2.05 % 10 +replace bb to ---- by init stringa|256_mean 559 ns 558 ns 10 +replace bb to ---- by init stringa|256_median 561 ns 562 ns 10 +replace bb to ---- by init stringa|256_stddev 10.8 ns 14.8 ns 10 +replace bb to ---- by init stringa|256_cv 1.93 % 2.66 % 10 +replace bb to ---- by init stringa|512_mean 1035 ns 1032 ns 10 +replace bb to ---- by init stringa|512_median 1022 ns 1025 ns 10 +replace bb to ---- by init stringa|512_stddev 78.3 ns 74.5 ns 10 +replace bb to ---- by init stringa|512_cv 7.56 % 7.22 % 10 +replace bb to ---- by init stringa|1024_mean 1850 ns 1842 ns 10 +replace bb to ---- by init stringa|1024_median 1849 ns 1842 ns 10 +replace bb to ---- by init stringa|1024_stddev 50.8 ns 51.2 ns 10 +replace bb to ---- by init stringa|1024_cv 2.75 % 2.78 % 10 +replace bb to ---- by init stringa|2048_mean 3423 ns 3409 ns 10 +replace bb to ---- by init stringa|2048_median 3423 ns 3369 ns 10 +replace bb to ---- by init stringa|2048_stddev 76.7 ns 86.6 ns 10 +replace bb to ---- by init stringa|2048_cv 2.24 % 2.54 % 10 +----- Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to -- in std::string|64_mean 192 ns 192 ns 10 +replace bb to -- in std::string|64_median 192 ns 190 ns 10 +replace bb to -- in std::string|64_stddev 4.79 ns 5.39 ns 10 +replace bb to -- in std::string|64_cv 2.49 % 2.80 % 10 +replace bb to -- in std::string|256_mean 495 ns 495 ns 10 +replace bb to -- in std::string|256_median 494 ns 500 ns 10 +replace bb to -- in std::string|256_stddev 7.23 ns 10.5 ns 10 +replace bb to -- in std::string|256_cv 1.46 % 2.13 % 10 +replace bb to -- in std::string|512_mean 854 ns 853 ns 10 +replace bb to -- in std::string|512_median 846 ns 854 ns 10 +replace bb to -- in std::string|512_stddev 19.6 ns 23.9 ns 10 +replace bb to -- in std::string|512_cv 2.30 % 2.80 % 10 +replace bb to -- in std::string|1024_mean 1670 ns 1665 ns 10 +replace bb to -- in std::string|1024_median 1665 ns 1669 ns 10 +replace bb to -- in std::string|1024_stddev 21.3 ns 37.1 ns 10 +replace bb to -- in std::string|1024_cv 1.28 % 2.23 % 10 +replace bb to -- in std::string|2048_mean 3178 ns 3142 ns 10 +replace bb to -- in std::string|2048_median 3200 ns 3149 ns 10 +replace bb to -- in std::string|2048_stddev 71.4 ns 64.1 ns 10 +replace bb to -- in std::string|2048_cv 2.25 % 2.04 % 10 replace bb to -- in lstringa<8>|64_mean 192 ns 191 ns 10 -replace bb to -- in lstringa<8>|64_median 189 ns 188 ns 10 -replace bb to -- in lstringa<8>|64_stddev 8.04 ns 7.43 ns 10 -replace bb to -- in lstringa<8>|64_cv 4.19 % 3.90 % 10 -replace bb to -- in lstringa<8>|256_mean 452 ns 450 ns 10 -replace bb to -- in lstringa<8>|256_median 452 ns 449 ns 10 -replace bb to -- in lstringa<8>|256_stddev 9.20 ns 12.6 ns 10 -replace bb to -- in lstringa<8>|256_cv 2.04 % 2.79 % 10 -replace bb to -- in lstringa<8>|512_mean 797 ns 790 ns 10 -replace bb to -- in lstringa<8>|512_median 796 ns 785 ns 10 -replace bb to -- in lstringa<8>|512_stddev 11.3 ns 14.4 ns 10 -replace bb to -- in lstringa<8>|512_cv 1.42 % 1.82 % 10 -replace bb to -- in lstringa<8>|1024_mean 1444 ns 1437 ns 10 -replace bb to -- in lstringa<8>|1024_median 1435 ns 1430 ns 10 -replace bb to -- in lstringa<8>|1024_stddev 28.8 ns 39.6 ns 10 -replace bb to -- in lstringa<8>|1024_cv 2.00 % 2.76 % 10 -replace bb to -- in lstringa<8>|2048_mean 2839 ns 2844 ns 10 -replace bb to -- in lstringa<8>|2048_median 2831 ns 2825 ns 10 -replace bb to -- in lstringa<8>|2048_stddev 55.3 ns 78.6 ns 10 -replace bb to -- in lstringa<8>|2048_cv 1.95 % 2.76 % 10 -replace bb to -- by init stringa|64_mean 167 ns 166 ns 10 -replace bb to -- by init stringa|64_median 167 ns 165 ns 10 -replace bb to -- by init stringa|64_stddev 5.30 ns 3.96 ns 10 -replace bb to -- by init stringa|64_cv 3.17 % 2.39 % 10 -replace bb to -- by init stringa|256_mean 352 ns 351 ns 10 +replace bb to -- in lstringa<8>|64_median 190 ns 190 ns 10 +replace bb to -- in lstringa<8>|64_stddev 6.14 ns 5.56 ns 10 +replace bb to -- in lstringa<8>|64_cv 3.21 % 2.90 % 10 +replace bb to -- in lstringa<8>|256_mean 446 ns 442 ns 10 +replace bb to -- in lstringa<8>|256_median 449 ns 439 ns 10 +replace bb to -- in lstringa<8>|256_stddev 12.1 ns 12.2 ns 10 +replace bb to -- in lstringa<8>|256_cv 2.72 % 2.76 % 10 +replace bb to -- in lstringa<8>|512_mean 789 ns 785 ns 10 +replace bb to -- in lstringa<8>|512_median 790 ns 785 ns 10 +replace bb to -- in lstringa<8>|512_stddev 20.5 ns 21.7 ns 10 +replace bb to -- in lstringa<8>|512_cv 2.59 % 2.77 % 10 +replace bb to -- in lstringa<8>|1024_mean 1526 ns 1521 ns 10 +replace bb to -- in lstringa<8>|1024_median 1510 ns 1500 ns 10 +replace bb to -- in lstringa<8>|1024_stddev 92.5 ns 93.3 ns 10 +replace bb to -- in lstringa<8>|1024_cv 6.06 % 6.14 % 10 +replace bb to -- in lstringa<8>|2048_mean 2820 ns 2798 ns 10 +replace bb to -- in lstringa<8>|2048_median 2800 ns 2783 ns 10 +replace bb to -- in lstringa<8>|2048_stddev 105 ns 113 ns 10 +replace bb to -- in lstringa<8>|2048_cv 3.72 % 4.06 % 10 +replace bb to -- by init stringa|64_mean 162 ns 161 ns 10 +replace bb to -- by init stringa|64_median 163 ns 161 ns 10 +replace bb to -- by init stringa|64_stddev 4.40 ns 4.59 ns 10 +replace bb to -- by init stringa|64_cv 2.72 % 2.86 % 10 +replace bb to -- by init stringa|256_mean 354 ns 352 ns 10 replace bb to -- by init stringa|256_median 353 ns 353 ns 10 -replace bb to -- by init stringa|256_stddev 4.26 ns 5.07 ns 10 -replace bb to -- by init stringa|256_cv 1.21 % 1.44 % 10 -replace bb to -- by init stringa|512_mean 598 ns 596 ns 10 -replace bb to -- by init stringa|512_median 597 ns 600 ns 10 -replace bb to -- by init stringa|512_stddev 11.5 ns 14.8 ns 10 -replace bb to -- by init stringa|512_cv 1.92 % 2.48 % 10 -replace bb to -- by init stringa|1024_mean 1082 ns 1078 ns 10 -replace bb to -- by init stringa|1024_median 1084 ns 1088 ns 10 -replace bb to -- by init stringa|1024_stddev 24.1 ns 28.3 ns 10 -replace bb to -- by init stringa|1024_cv 2.23 % 2.63 % 10 -replace bb to -- by init stringa|2048_mean 1963 ns 1963 ns 10 -replace bb to -- by init stringa|2048_median 1964 ns 1967 ns 10 -replace bb to -- by init stringa|2048_stddev 29.4 ns 36.6 ns 10 -replace bb to -- by init stringa|2048_cv 1.50 % 1.87 % 10 ------ Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -hashStrMapA emplace & find stringa;_mean 4144900 ns 4132154 ns 10 -hashStrMapA emplace & find stringa;_median 4145547 ns 4094503 ns 10 -hashStrMapA emplace & find stringa;_stddev 160485 ns 168671 ns 10 -hashStrMapA emplace & find stringa;_cv 3.87 % 4.08 % 10 -std::unordered_map emplace & find std::string;_mean 5984962 ns 5929129 ns 10 -std::unordered_map emplace & find std::string;_median 5980382 ns 5929129 ns 10 -std::unordered_map emplace & find std::string;_stddev 115002 ns 118560 ns 10 -std::unordered_map emplace & find std::string;_cv 1.92 % 2.00 % 10 -hashStrMapA emplace & find ssa;_mean 3983708 ns 3942587 ns 10 -hashStrMapA emplace & find ssa;_median 3962420 ns 3906250 ns 10 -hashStrMapA emplace & find ssa;_stddev 76626 ns 97653 ns 10 -hashStrMapA emplace & find ssa;_cv 1.92 % 2.48 % 10 -std::unordered_map emplace & find std::string_view;_mean 7030276 ns 7003348 ns 10 -std::unordered_map emplace & find std::string_view;_median 6994535 ns 6975446 ns 10 -std::unordered_map emplace & find std::string_view;_stddev 131572 ns 158383 ns 10 -std::unordered_map emplace & find std::string_view;_cv 1.87 % 2.26 % 10 ------ Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -Build func full name std::string;_mean 1588 ns 1580 ns 10 -Build func full name std::string;_median 1583 ns 1569 ns 10 -Build func full name std::string;_stddev 33.8 ns 33.1 ns 10 -Build func full name std::string;_cv 2.13 % 2.09 % 10 -Build func full name std::string 1;_mean 1648 ns 1638 ns 10 -Build func full name std::string 1;_median 1626 ns 1631 ns 10 -Build func full name std::string 1;_stddev 60.0 ns 57.3 ns 10 -Build func full name std::string 1;_cv 3.64 % 3.50 % 10 -Build func full name std::stream;_mean 10979 ns 10718 ns 10 -Build func full name std::stream;_median 10840 ns 10742 ns 10 -Build func full name std::stream;_stddev 530 ns 269 ns 10 -Build func full name std::stream;_cv 4.82 % 2.51 % 10 -Build func full name stringa;_mean 847 ns 844 ns 10 -Build func full name stringa;_median 844 ns 837 ns 10 -Build func full name stringa;_stddev 22.6 ns 20.5 ns 10 -Build func full name stringa;_cv 2.66 % 2.43 % 10 -Build func full name stringa 1;_mean 1003 ns 998 ns 10 -Build func full name stringa 1;_median 999 ns 1004 ns 10 -Build func full name stringa 1;_stddev 12.7 ns 14.1 ns 10 -Build func full name stringa 1;_cv 1.27 % 1.41 % 10 +replace bb to -- by init stringa|256_stddev 5.85 ns 7.63 ns 10 +replace bb to -- by init stringa|256_cv 1.65 % 2.17 % 10 +replace bb to -- by init stringa|512_mean 600 ns 596 ns 10 +replace bb to -- by init stringa|512_median 596 ns 586 ns 10 +replace bb to -- by init stringa|512_stddev 25.7 ns 22.8 ns 10 +replace bb to -- by init stringa|512_cv 4.29 % 3.83 % 10 +replace bb to -- by init stringa|1024_mean 1079 ns 1067 ns 10 +replace bb to -- by init stringa|1024_median 1070 ns 1062 ns 10 +replace bb to -- by init stringa|1024_stddev 29.7 ns 28.3 ns 10 +replace bb to -- by init stringa|1024_cv 2.75 % 2.65 % 10 +replace bb to -- by init stringa|2048_mean 2067 ns 2061 ns 10 +replace bb to -- by init stringa|2048_median 2060 ns 2051 ns 10 +replace bb to -- by init stringa|2048_stddev 50.6 ns 44.9 ns 10 +replace bb to -- by init stringa|2048_cv 2.45 % 2.18 % 10 +----- Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +hashStrMapA emplace & find stringa;_mean 3852886 ns 3824491 ns 10 +hashStrMapA emplace & find stringa;_median 3878020 ns 3860828 ns 10 +hashStrMapA emplace & find stringa;_stddev 176851 ns 168325 ns 10 +hashStrMapA emplace & find stringa;_cv 4.59 % 4.40 % 10 +std::unordered_map emplace & find std::string;_mean 5329837 ns 5281250 ns 10 +std::unordered_map emplace & find std::string;_median 5354391 ns 5312500 ns 10 +std::unordered_map emplace & find std::string;_stddev 95363 ns 161374 ns 10 +std::unordered_map emplace & find std::string;_cv 1.79 % 3.06 % 10 +hashStrMapA emplace & find ssa;_mean 3511046 ns 3477564 ns 10 +hashStrMapA emplace & find ssa;_median 3499198 ns 3445513 ns 10 +hashStrMapA emplace & find ssa;_stddev 74703 ns 67570 ns 10 +hashStrMapA emplace & find ssa;_cv 2.13 % 1.94 % 10 +std::unordered_map emplace & find std::string_view;_mean 6336347 ns 6333705 ns 10 +std::unordered_map emplace & find std::string_view;_median 6314743 ns 6277902 ns 10 +std::unordered_map emplace & find std::string_view;_stddev 87714 ns 97545 ns 10 +std::unordered_map emplace & find std::string_view;_cv 1.38 % 1.54 % 10 +----- Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +Build func full name std::string;_mean 1581 ns 1565 ns 10 +Build func full name std::string;_median 1578 ns 1573 ns 10 +Build func full name std::string;_stddev 17.3 ns 30.3 ns 10 +Build func full name std::string;_cv 1.10 % 1.93 % 10 +Build func full name std::string 1;_mean 1654 ns 1635 ns 10 +Build func full name std::string 1;_median 1646 ns 1632 ns 10 +Build func full name std::string 1;_stddev 62.7 ns 47.8 ns 10 +Build func full name std::string 1;_cv 3.79 % 2.92 % 10 +Build func full name std::stream;_mean 8195 ns 8179 ns 10 +Build func full name std::stream;_median 8225 ns 8196 ns 10 +Build func full name std::stream;_stddev 138 ns 192 ns 10 +Build func full name std::stream;_cv 1.69 % 2.35 % 10 +Build func full name stringa;_mean 859 ns 851 ns 10 +Build func full name stringa;_median 855 ns 854 ns 10 +Build func full name stringa;_stddev 12.6 ns 18.0 ns 10 +Build func full name stringa;_cv 1.47 % 2.12 % 10 +Build func full name stringa 1;_mean 1015 ns 1011 ns 10 +Build func full name stringa 1;_median 1014 ns 1001 ns 10 +Build func full name stringa 1;_stddev 28.4 ns 30.9 ns 10 +Build func full name stringa 1;_cv 2.79 % 3.06 % 10 diff --git a/bench/results/003-Xeon E5-2682 v4, Windows 10, MSVC-19.txt b/bench/results/003-Xeon E5-2682 v4, Windows 10, MSVC-19.txt index baadaf7..c14e87d 100644 --- a/bench/results/003-Xeon E5-2682 v4, Windows 10, MSVC-19.txt +++ b/bench/results/003-Xeon E5-2682 v4, Windows 10, MSVC-19.txt @@ -1,6 +1,6 @@ -2025-08-06T12:39:51+03:00 +2025-11-26T19:57:30+03:00 Running benchStr.exe -Run on (32 X 2497.21 MHz CPU s) +Run on (32 X 2494 MHz CPU s) CPU Caches: L1 Data 32 KiB (x16) L1 Instruction 32 KiB (x16) @@ -9,769 +9,782 @@ CPU Caches: -------------------------------------------------------------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------------------------------------------------------------- ------ Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e;_mean 2.59 ns 2.58 ns 10 -std::string e;_median 2.60 ns 2.61 ns 10 -std::string e;_stddev 0.037 ns 0.081 ns 10 -std::string e;_cv 1.42 % 3.13 % 10 -std::string_view e;_mean 1.86 ns 1.84 ns 10 -std::string_view e;_median 1.85 ns 1.84 ns 10 -std::string_view e;_stddev 0.025 ns 0.040 ns 10 -std::string_view e;_cv 1.33 % 2.20 % 10 -ssa e;_mean 1.84 ns 1.84 ns 10 -ssa e;_median 1.84 ns 1.81 ns 10 -ssa e;_stddev 0.033 ns 0.044 ns 10 -ssa e;_cv 1.79 % 2.40 % 10 -stringa e;_mean 2.22 ns 2.22 ns 10 -stringa e;_median 2.23 ns 2.22 ns 10 -stringa e;_stddev 0.034 ns 0.034 ns 10 -stringa e;_cv 1.53 % 1.54 % 10 -lstringa<20> e;_mean 2.62 ns 2.60 ns 10 -lstringa<20> e;_median 2.59 ns 2.61 ns 10 -lstringa<20> e;_stddev 0.136 ns 0.078 ns 10 -lstringa<20> e;_cv 5.18 % 3.01 % 10 -lstringa<40> e;_mean 2.60 ns 2.58 ns 10 -lstringa<40> e;_median 2.61 ns 2.57 ns 10 -lstringa<40> e;_stddev 0.049 ns 0.051 ns 10 -lstringa<40> e;_cv 1.86 % 1.99 % 10 ------ Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text";_mean 2.61 ns 2.59 ns 10 -std::string e = "Test text";_median 2.61 ns 2.61 ns 10 -std::string e = "Test text";_stddev 0.056 ns 0.064 ns 10 -std::string e = "Test text";_cv 2.16 % 2.47 % 10 -std::string_view e = "Test text";_mean 1.83 ns 1.83 ns 10 -std::string_view e = "Test text";_median 1.83 ns 1.82 ns 10 -std::string_view e = "Test text";_stddev 0.027 ns 0.034 ns 10 -std::string_view e = "Test text";_cv 1.45 % 1.88 % 10 -ssa e = "Test text";_mean 1.84 ns 1.84 ns 10 -ssa e = "Test text";_median 1.83 ns 1.84 ns 10 -ssa e = "Test text";_stddev 0.029 ns 0.037 ns 10 -ssa e = "Test text";_cv 1.57 % 1.99 % 10 -stringa e = "Test text";_mean 2.60 ns 2.59 ns 10 -stringa e = "Test text";_median 2.60 ns 2.58 ns 10 -stringa e = "Test text";_stddev 0.040 ns 0.041 ns 10 -stringa e = "Test text";_cv 1.52 % 1.60 % 10 -lstringa<20> e = "Test text";_mean 2.25 ns 2.25 ns 10 -lstringa<20> e = "Test text";_median 2.25 ns 2.25 ns 10 -lstringa<20> e = "Test text";_stddev 0.031 ns 0.033 ns 10 -lstringa<20> e = "Test text";_cv 1.38 % 1.45 % 10 -lstringa<40> e = "Test text";_mean 2.63 ns 2.62 ns 10 -lstringa<40> e = "Test text";_median 2.62 ns 2.62 ns 10 -lstringa<40> e = "Test text";_stddev 0.063 ns 0.053 ns 10 -lstringa<40> e = "Test text";_cv 2.41 % 2.01 % 10 ------ Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890";_mean 74.8 ns 74.8 ns 10 -std::string e = "123456789012345678901234567890";_median 75.4 ns 75.0 ns 10 -std::string e = "123456789012345678901234567890";_stddev 1.69 ns 1.73 ns 10 -std::string e = "123456789012345678901234567890";_cv 2.26 % 2.32 % 10 -std::string_view e = "123456789012345678901234567890";_mean 1.84 ns 1.83 ns 10 -std::string_view e = "123456789012345678901234567890";_median 1.84 ns 1.84 ns 10 -std::string_view e = "123456789012345678901234567890";_stddev 0.018 ns 0.028 ns 10 -std::string_view e = "123456789012345678901234567890";_cv 1.00 % 1.54 % 10 -ssa e = "123456789012345678901234567890";_mean 1.85 ns 1.85 ns 10 -ssa e = "123456789012345678901234567890";_median 1.85 ns 1.84 ns 10 -ssa e = "123456789012345678901234567890";_stddev 0.022 ns 0.026 ns 10 -ssa e = "123456789012345678901234567890";_cv 1.17 % 1.43 % 10 -stringa e = "123456789012345678901234567890";_mean 2.92 ns 2.88 ns 10 -stringa e = "123456789012345678901234567890";_median 2.89 ns 2.89 ns 10 -stringa e = "123456789012345678901234567890";_stddev 0.100 ns 0.026 ns 10 -stringa e = "123456789012345678901234567890";_cv 3.43 % 0.92 % 10 -lstringa<20> e = "123456789012345678901234567890";_mean 76.7 ns 76.0 ns 10 -lstringa<20> e = "123456789012345678901234567890";_median 76.7 ns 76.7 ns 10 -lstringa<20> e = "123456789012345678901234567890";_stddev 1.13 ns 1.47 ns 10 -lstringa<20> e = "123456789012345678901234567890";_cv 1.48 % 1.93 % 10 -lstringa<40> e = "123456789012345678901234567890";_mean 3.01 ns 2.99 ns 10 -lstringa<40> e = "123456789012345678901234567890";_median 3.01 ns 2.95 ns 10 -lstringa<40> e = "123456789012345678901234567890";_stddev 0.059 ns 0.079 ns 10 -lstringa<40> e = "123456789012345678901234567890";_cv 1.96 % 2.62 % 10 ------ Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text"; auto c{e};_mean 5.16 ns 5.13 ns 10 -std::string e = "Test text"; auto c{e};_median 5.17 ns 5.16 ns 10 -std::string e = "Test text"; auto c{e};_stddev 0.099 ns 0.128 ns 10 -std::string e = "Test text"; auto c{e};_cv 1.91 % 2.50 % 10 -std::string_view e = "Test text"; auto c{e};_mean 3.74 ns 3.73 ns 10 -std::string_view e = "Test text"; auto c{e};_median 3.73 ns 3.75 ns 10 -std::string_view e = "Test text"; auto c{e};_stddev 0.024 ns 0.055 ns 10 -std::string_view e = "Test text"; auto c{e};_cv 0.64 % 1.48 % 10 -ssa e = "Test text"; auto c{e};_mean 3.75 ns 3.74 ns 10 -ssa e = "Test text"; auto c{e};_median 3.75 ns 3.77 ns 10 -ssa e = "Test text"; auto c{e};_stddev 0.023 ns 0.040 ns 10 -ssa e = "Test text"; auto c{e};_cv 0.62 % 1.08 % 10 -stringa e = "Test text"; auto c{e};_mean 4.07 ns 4.06 ns 10 -stringa e = "Test text"; auto c{e};_median 4.08 ns 4.05 ns 10 -stringa e = "Test text"; auto c{e};_stddev 0.031 ns 0.069 ns 10 -stringa e = "Test text"; auto c{e};_cv 0.76 % 1.71 % 10 -lstringa<20> e = "Test text"; auto c{e};_mean 8.64 ns 8.62 ns 10 -lstringa<20> e = "Test text"; auto c{e};_median 8.54 ns 8.58 ns 10 -lstringa<20> e = "Test text"; auto c{e};_stddev 0.240 ns 0.276 ns 10 -lstringa<20> e = "Test text"; auto c{e};_cv 2.78 % 3.20 % 10 -lstringa<40> e = "Test text"; auto c{e};_mean 8.46 ns 8.44 ns 10 -lstringa<40> e = "Test text"; auto c{e};_median 8.46 ns 8.37 ns 10 -lstringa<40> e = "Test text"; auto c{e};_stddev 0.110 ns 0.147 ns 10 -lstringa<40> e = "Test text"; auto c{e};_cv 1.29 % 1.74 % 10 ------ Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890"; auto c{e};_mean 76.3 ns 75.5 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_median 75.7 ns 75.0 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_stddev 3.22 ns 2.61 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_cv 4.22 % 3.45 % 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 1.84 ns 1.84 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_median 1.84 ns 1.84 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.018 ns 0.034 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 1.00 % 1.86 % 10 -ssa e = "123456789012345678901234567890"; auto c{e};_mean 1.87 ns 1.84 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_median 1.85 ns 1.84 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.110 ns 0.034 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_cv 5.87 % 1.86 % 10 -stringa e = "123456789012345678901234567890"; auto c{e};_mean 2.97 ns 2.96 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_median 2.97 ns 2.95 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.045 ns 0.078 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_cv 1.53 % 2.63 % 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 82.0 ns 82.0 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 81.4 ns 82.0 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 2.62 ns 2.47 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 3.20 % 3.01 % 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 7.05 ns 7.05 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 7.04 ns 7.11 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.058 ns 0.099 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 0.83 % 1.40 % 10 ------ Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find;_mean 42.5 ns 42.2 ns 10 -std::string::find;_median 41.6 ns 41.0 ns 10 -std::string::find;_stddev 3.23 ns 3.41 ns 10 -std::string::find;_cv 7.61 % 8.08 % 10 -std::string_view::find;_mean 41.5 ns 40.8 ns 10 -std::string_view::find;_median 41.0 ns 40.8 ns 10 -std::string_view::find;_stddev 1.46 ns 0.855 ns 10 -std::string_view::find;_cv 3.52 % 2.10 % 10 -ssa::find;_mean 21.1 ns 21.0 ns 10 -ssa::find;_median 21.2 ns 20.9 ns 10 -ssa::find;_stddev 0.338 ns 0.430 ns 10 -ssa::find;_cv 1.60 % 2.05 % 10 -stringa::find;_mean 32.2 ns 32.2 ns 10 -stringa::find;_median 32.2 ns 32.1 ns 10 -stringa::find;_stddev 1.30 ns 1.22 ns 10 -stringa::find;_cv 4.02 % 3.79 % 10 -lstringa<20>::find;_mean 21.3 ns 21.2 ns 10 -lstringa<20>::find;_median 21.2 ns 21.1 ns 10 -lstringa<20>::find;_stddev 0.530 ns 0.526 ns 10 -lstringa<20>::find;_cv 2.49 % 2.48 % 10 -lstringa<40>::find;_mean 21.6 ns 21.4 ns 10 -lstringa<40>::find;_median 21.5 ns 21.5 ns 10 -lstringa<40>::find;_stddev 0.399 ns 0.428 ns 10 -lstringa<40>::find;_cv 1.85 % 1.99 % 10 -------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string copy{str_with_len_N};/15_mean 5.18 ns 5.15 ns 10 -std::string copy{str_with_len_N};/15_median 5.18 ns 5.16 ns 10 -std::string copy{str_with_len_N};/15_stddev 0.073 ns 0.122 ns 10 -std::string copy{str_with_len_N};/15_cv 1.42 % 2.37 % 10 -std::string copy{str_with_len_N};/16_mean 84.9 ns 83.5 ns 10 -std::string copy{str_with_len_N};/16_median 83.6 ns 83.7 ns 10 -std::string copy{str_with_len_N};/16_stddev 3.62 ns 2.39 ns 10 -std::string copy{str_with_len_N};/16_cv 4.26 % 2.86 % 10 -std::string copy{str_with_len_N};/23_mean 85.1 ns 84.5 ns 10 -std::string copy{str_with_len_N};/23_median 84.5 ns 83.7 ns 10 -std::string copy{str_with_len_N};/23_stddev 3.10 ns 2.88 ns 10 -std::string copy{str_with_len_N};/23_cv 3.64 % 3.41 % 10 -std::string copy{str_with_len_N};/24_mean 83.1 ns 82.7 ns 10 -std::string copy{str_with_len_N};/24_median 83.3 ns 83.7 ns 10 -std::string copy{str_with_len_N};/24_stddev 1.97 ns 2.75 ns 10 -std::string copy{str_with_len_N};/24_cv 2.37 % 3.33 % 10 -std::string copy{str_with_len_N};/32_mean 89.1 ns 87.9 ns 10 -std::string copy{str_with_len_N};/32_median 89.5 ns 87.9 ns 10 -std::string copy{str_with_len_N};/32_stddev 1.88 ns 2.21 ns 10 -std::string copy{str_with_len_N};/32_cv 2.11 % 2.51 % 10 -std::string copy{str_with_len_N};/64_mean 89.7 ns 89.1 ns 10 -std::string copy{str_with_len_N};/64_median 89.3 ns 90.0 ns 10 -std::string copy{str_with_len_N};/64_stddev 3.48 ns 2.82 ns 10 -std::string copy{str_with_len_N};/64_cv 3.88 % 3.17 % 10 -std::string copy{str_with_len_N};/128_mean 89.0 ns 88.3 ns 10 -std::string copy{str_with_len_N};/128_median 89.4 ns 87.9 ns 10 -std::string copy{str_with_len_N};/128_stddev 1.67 ns 1.65 ns 10 -std::string copy{str_with_len_N};/128_cv 1.88 % 1.87 % 10 -std::string copy{str_with_len_N};/256_mean 91.5 ns 89.6 ns 10 -std::string copy{str_with_len_N};/256_median 90.9 ns 90.0 ns 10 -std::string copy{str_with_len_N};/256_stddev 3.43 ns 2.38 ns 10 -std::string copy{str_with_len_N};/256_cv 3.75 % 2.65 % 10 -std::string copy{str_with_len_N};/512_mean 93.8 ns 93.5 ns 10 -std::string copy{str_with_len_N};/512_median 94.0 ns 94.2 ns 10 -std::string copy{str_with_len_N};/512_stddev 1.39 ns 1.99 ns 10 -std::string copy{str_with_len_N};/512_cv 1.48 % 2.12 % 10 -std::string copy{str_with_len_N};/1024_mean 99.5 ns 99.4 ns 10 -std::string copy{str_with_len_N};/1024_median 99.3 ns 98.4 ns 10 -std::string copy{str_with_len_N};/1024_stddev 2.81 ns 3.31 ns 10 -std::string copy{str_with_len_N};/1024_cv 2.82 % 3.33 % 10 -std::string copy{str_with_len_N};/2048_mean 132 ns 131 ns 10 -std::string copy{str_with_len_N};/2048_median 133 ns 131 ns 10 -std::string copy{str_with_len_N};/2048_stddev 6.13 ns 5.17 ns 10 -std::string copy{str_with_len_N};/2048_cv 4.64 % 3.95 % 10 -std::string copy{str_with_len_N};/4096_mean 181 ns 180 ns 10 -std::string copy{str_with_len_N};/4096_median 182 ns 182 ns 10 -std::string copy{str_with_len_N};/4096_stddev 3.84 ns 4.83 ns 10 -std::string copy{str_with_len_N};/4096_cv 2.12 % 2.69 % 10 -stringa copy{str_with_len_N};/15_mean 4.15 ns 4.06 ns 10 -stringa copy{str_with_len_N};/15_median 4.12 ns 4.08 ns 10 -stringa copy{str_with_len_N};/15_stddev 0.168 ns 0.083 ns 10 -stringa copy{str_with_len_N};/15_cv 4.04 % 2.05 % 10 -stringa copy{str_with_len_N};/16_mean 4.11 ns 4.10 ns 10 -stringa copy{str_with_len_N};/16_median 4.11 ns 4.08 ns 10 -stringa copy{str_with_len_N};/16_stddev 0.036 ns 0.057 ns 10 -stringa copy{str_with_len_N};/16_cv 0.88 % 1.40 % 10 -stringa copy{str_with_len_N};/23_mean 4.13 ns 4.13 ns 10 -stringa copy{str_with_len_N};/23_median 4.12 ns 4.13 ns 10 -stringa copy{str_with_len_N};/23_stddev 0.051 ns 0.077 ns 10 -stringa copy{str_with_len_N};/23_cv 1.22 % 1.87 % 10 -stringa copy{str_with_len_N};/24_mean 18.7 ns 18.6 ns 10 +----- Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e;_mean 2.95 ns 2.92 ns 10 +std::string e;_median 2.90 ns 2.89 ns 10 +std::string e;_stddev 0.162 ns 0.108 ns 10 +std::string e;_cv 5.50 % 3.69 % 10 +std::string_view e;_mean 1.85 ns 1.85 ns 10 +std::string_view e;_median 1.86 ns 1.84 ns 10 +std::string_view e;_stddev 0.054 ns 0.064 ns 10 +std::string_view e;_cv 2.92 % 3.46 % 10 +ssa e;_mean 1.52 ns 1.50 ns 10 +ssa e;_median 1.51 ns 1.49 ns 10 +ssa e;_stddev 0.064 ns 0.050 ns 10 +ssa e;_cv 4.24 % 3.33 % 10 +stringa e;_mean 2.25 ns 2.24 ns 10 +stringa e;_median 2.22 ns 2.20 ns 10 +stringa e;_stddev 0.093 ns 0.082 ns 10 +stringa e;_cv 4.14 % 3.68 % 10 +lstringa<20> e;_mean 2.58 ns 2.57 ns 10 +lstringa<20> e;_median 2.58 ns 2.57 ns 10 +lstringa<20> e;_stddev 0.065 ns 0.083 ns 10 +lstringa<20> e;_cv 2.51 % 3.24 % 10 +lstringa<40> e;_mean 2.59 ns 2.58 ns 10 +lstringa<40> e;_median 2.56 ns 2.57 ns 10 +lstringa<40> e;_stddev 0.067 ns 0.059 ns 10 +lstringa<40> e;_cv 2.60 % 2.29 % 10 +----- Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text";_mean 2.58 ns 2.58 ns 10 +std::string e = "Test text";_median 2.58 ns 2.57 ns 10 +std::string e = "Test text";_stddev 0.045 ns 0.063 ns 10 +std::string e = "Test text";_cv 1.75 % 2.46 % 10 +std::string_view e = "Test text";_mean 1.90 ns 1.89 ns 10 +std::string_view e = "Test text";_median 1.86 ns 1.86 ns 10 +std::string_view e = "Test text";_stddev 0.110 ns 0.102 ns 10 +std::string_view e = "Test text";_cv 5.80 % 5.41 % 10 +ssa e = "Test text";_mean 1.85 ns 1.84 ns 10 +ssa e = "Test text";_median 1.84 ns 1.81 ns 10 +ssa e = "Test text";_stddev 0.064 ns 0.068 ns 10 +ssa e = "Test text";_cv 3.49 % 3.73 % 10 +stringa e = "Test text";_mean 2.92 ns 2.91 ns 10 +stringa e = "Test text";_median 2.87 ns 2.89 ns 10 +stringa e = "Test text";_stddev 0.100 ns 0.095 ns 10 +stringa e = "Test text";_cv 3.44 % 3.24 % 10 +lstringa<20> e = "Test text";_mean 2.59 ns 2.57 ns 10 +lstringa<20> e = "Test text";_median 2.56 ns 2.54 ns 10 +lstringa<20> e = "Test text";_stddev 0.087 ns 0.083 ns 10 +lstringa<20> e = "Test text";_cv 3.35 % 3.24 % 10 +lstringa<40> e = "Test text";_mean 2.61 ns 2.58 ns 10 +lstringa<40> e = "Test text";_median 2.58 ns 2.57 ns 10 +lstringa<40> e = "Test text";_stddev 0.081 ns 0.065 ns 10 +lstringa<40> e = "Test text";_cv 3.12 % 2.50 % 10 +----- Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890";_mean 76.0 ns 75.9 ns 10 +std::string e = "123456789012345678901234567890";_median 76.2 ns 76.7 ns 10 +std::string e = "123456789012345678901234567890";_stddev 1.00 ns 1.23 ns 10 +std::string e = "123456789012345678901234567890";_cv 1.32 % 1.63 % 10 +std::string_view e = "123456789012345678901234567890";_mean 1.82 ns 1.82 ns 10 +std::string_view e = "123456789012345678901234567890";_median 1.82 ns 1.80 ns 10 +std::string_view e = "123456789012345678901234567890";_stddev 0.029 ns 0.029 ns 10 +std::string_view e = "123456789012345678901234567890";_cv 1.58 % 1.61 % 10 +ssa e = "123456789012345678901234567890";_mean 1.82 ns 1.81 ns 10 +ssa e = "123456789012345678901234567890";_median 1.82 ns 1.80 ns 10 +ssa e = "123456789012345678901234567890";_stddev 0.018 ns 0.033 ns 10 +ssa e = "123456789012345678901234567890";_cv 1.00 % 1.83 % 10 +stringa e = "123456789012345678901234567890";_mean 2.58 ns 2.56 ns 10 +stringa e = "123456789012345678901234567890";_median 2.56 ns 2.54 ns 10 +stringa e = "123456789012345678901234567890";_stddev 0.042 ns 0.058 ns 10 +stringa e = "123456789012345678901234567890";_cv 1.62 % 2.26 % 10 +lstringa<20> e = "123456789012345678901234567890";_mean 76.8 ns 76.2 ns 10 +lstringa<20> e = "123456789012345678901234567890";_median 75.9 ns 76.7 ns 10 +lstringa<20> e = "123456789012345678901234567890";_stddev 2.22 ns 2.18 ns 10 +lstringa<20> e = "123456789012345678901234567890";_cv 2.89 % 2.86 % 10 +lstringa<40> e = "123456789012345678901234567890";_mean 3.33 ns 3.31 ns 10 +lstringa<40> e = "123456789012345678901234567890";_median 3.29 ns 3.30 ns 10 +lstringa<40> e = "123456789012345678901234567890";_stddev 0.163 ns 0.142 ns 10 +lstringa<40> e = "123456789012345678901234567890";_cv 4.90 % 4.30 % 10 +----- Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text"; auto c{e};_mean 6.00 ns 5.95 ns 10 +std::string e = "Test text"; auto c{e};_median 5.93 ns 5.94 ns 10 +std::string e = "Test text"; auto c{e};_stddev 0.228 ns 0.260 ns 10 +std::string e = "Test text"; auto c{e};_cv 3.80 % 4.37 % 10 +std::string_view e = "Test text"; auto c{e};_mean 3.46 ns 3.46 ns 10 +std::string_view e = "Test text"; auto c{e};_median 3.46 ns 3.44 ns 10 +std::string_view e = "Test text"; auto c{e};_stddev 0.022 ns 0.046 ns 10 +std::string_view e = "Test text"; auto c{e};_cv 0.64 % 1.34 % 10 +ssa e = "Test text"; auto c{e};_mean 3.51 ns 3.50 ns 10 +ssa e = "Test text"; auto c{e};_median 3.49 ns 3.49 ns 10 +ssa e = "Test text"; auto c{e};_stddev 0.063 ns 0.054 ns 10 +ssa e = "Test text"; auto c{e};_cv 1.79 % 1.53 % 10 +stringa e = "Test text"; auto c{e};_mean 4.03 ns 4.03 ns 10 +stringa e = "Test text"; auto c{e};_median 4.01 ns 4.01 ns 10 +stringa e = "Test text"; auto c{e};_stddev 0.072 ns 0.069 ns 10 +stringa e = "Test text"; auto c{e};_cv 1.78 % 1.71 % 10 +lstringa<20> e = "Test text"; auto c{e};_mean 8.51 ns 8.48 ns 10 +lstringa<20> e = "Test text"; auto c{e};_median 8.55 ns 8.46 ns 10 +lstringa<20> e = "Test text"; auto c{e};_stddev 0.261 ns 0.221 ns 10 +lstringa<20> e = "Test text"; auto c{e};_cv 3.07 % 2.60 % 10 +lstringa<40> e = "Test text"; auto c{e};_mean 8.43 ns 8.35 ns 10 +lstringa<40> e = "Test text"; auto c{e};_median 8.38 ns 8.37 ns 10 +lstringa<40> e = "Test text"; auto c{e};_stddev 0.192 ns 0.230 ns 10 +lstringa<40> e = "Test text"; auto c{e};_cv 2.28 % 2.76 % 10 +----- Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890"; auto c{e};_mean 83.0 ns 82.5 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_median 82.5 ns 82.0 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_stddev 6.88 ns 6.68 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_cv 8.29 % 8.10 % 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 1.90 ns 1.88 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_median 1.87 ns 1.84 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.097 ns 0.104 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 5.13 % 5.53 % 10 +ssa e = "123456789012345678901234567890"; auto c{e};_mean 2.02 ns 2.02 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_median 2.01 ns 2.01 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.075 ns 0.073 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_cv 3.72 % 3.61 % 10 +stringa e = "123456789012345678901234567890"; auto c{e};_mean 3.41 ns 3.40 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_median 3.41 ns 3.38 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.160 ns 0.166 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_cv 4.68 % 4.88 % 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 90.4 ns 90.4 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 83.6 ns 83.7 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 13.9 ns 14.5 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 15.35 % 16.03 % 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 7.11 ns 7.07 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 6.99 ns 6.84 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.506 ns 0.530 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 7.11 % 7.50 % 10 +----- Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find;_mean 45.0 ns 44.8 ns 10 +std::string::find;_median 45.0 ns 44.9 ns 10 +std::string::find;_stddev 1.20 ns 1.34 ns 10 +std::string::find;_cv 2.68 % 2.99 % 10 +std::string_view::find;_mean 44.2 ns 44.0 ns 10 +std::string_view::find;_median 44.1 ns 44.4 ns 10 +std::string_view::find;_stddev 1.41 ns 1.37 ns 10 +std::string_view::find;_cv 3.19 % 3.11 % 10 +ssa::find;_mean 21.8 ns 21.7 ns 10 +ssa::find;_median 21.1 ns 21.2 ns 10 +ssa::find;_stddev 1.70 ns 1.61 ns 10 +ssa::find;_cv 7.82 % 7.42 % 10 +stringa::find;_mean 31.0 ns 31.0 ns 10 +stringa::find;_median 31.3 ns 31.1 ns 10 +stringa::find;_stddev 1.29 ns 1.31 ns 10 +stringa::find;_cv 4.16 % 4.22 % 10 +lstringa<20>::find;_mean 26.3 ns 26.1 ns 10 +lstringa<20>::find;_median 26.4 ns 26.2 ns 10 +lstringa<20>::find;_stddev 1.00 ns 0.865 ns 10 +lstringa<20>::find;_cv 3.83 % 3.31 % 10 +lstringa<40>::find;_mean 24.9 ns 24.7 ns 10 +lstringa<40>::find;_median 25.0 ns 24.9 ns 10 +lstringa<40>::find;_stddev 2.48 ns 2.52 ns 10 +lstringa<40>::find;_cv 9.95 % 10.17 % 10 +------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string copy{str_with_len_N};/15_mean 4.45 ns 4.44 ns 10 +std::string copy{str_with_len_N};/15_median 4.43 ns 4.43 ns 10 +std::string copy{str_with_len_N};/15_stddev 0.086 ns 0.094 ns 10 +std::string copy{str_with_len_N};/15_cv 1.92 % 2.11 % 10 +std::string copy{str_with_len_N};/16_mean 94.0 ns 93.8 ns 10 +std::string copy{str_with_len_N};/16_median 95.6 ns 95.9 ns 10 +std::string copy{str_with_len_N};/16_stddev 6.54 ns 6.36 ns 10 +std::string copy{str_with_len_N};/16_cv 6.96 % 6.78 % 10 +std::string copy{str_with_len_N};/23_mean 94.8 ns 94.4 ns 10 +std::string copy{str_with_len_N};/23_median 96.5 ns 95.2 ns 10 +std::string copy{str_with_len_N};/23_stddev 5.33 ns 4.98 ns 10 +std::string copy{str_with_len_N};/23_cv 5.62 % 5.27 % 10 +std::string copy{str_with_len_N};/24_mean 97.7 ns 97.3 ns 10 +std::string copy{str_with_len_N};/24_median 95.9 ns 96.3 ns 10 +std::string copy{str_with_len_N};/24_stddev 9.75 ns 9.88 ns 10 +std::string copy{str_with_len_N};/24_cv 9.97 % 10.15 % 10 +std::string copy{str_with_len_N};/32_mean 95.8 ns 95.7 ns 10 +std::string copy{str_with_len_N};/32_median 94.1 ns 93.5 ns 10 +std::string copy{str_with_len_N};/32_stddev 8.79 ns 8.93 ns 10 +std::string copy{str_with_len_N};/32_cv 9.18 % 9.33 % 10 +std::string copy{str_with_len_N};/64_mean 94.1 ns 93.3 ns 10 +std::string copy{str_with_len_N};/64_median 95.5 ns 95.2 ns 10 +std::string copy{str_with_len_N};/64_stddev 8.50 ns 8.67 ns 10 +std::string copy{str_with_len_N};/64_cv 9.04 % 9.29 % 10 +std::string copy{str_with_len_N};/128_mean 103 ns 104 ns 10 +std::string copy{str_with_len_N};/128_median 106 ns 106 ns 10 +std::string copy{str_with_len_N};/128_stddev 6.50 ns 6.43 ns 10 +std::string copy{str_with_len_N};/128_cv 6.28 % 6.21 % 10 +std::string copy{str_with_len_N};/256_mean 105 ns 105 ns 10 +std::string copy{str_with_len_N};/256_median 107 ns 107 ns 10 +std::string copy{str_with_len_N};/256_stddev 5.83 ns 5.81 ns 10 +std::string copy{str_with_len_N};/256_cv 5.54 % 5.52 % 10 +std::string copy{str_with_len_N};/512_mean 97.1 ns 96.7 ns 10 +std::string copy{str_with_len_N};/512_median 94.0 ns 92.8 ns 10 +std::string copy{str_with_len_N};/512_stddev 8.76 ns 9.15 ns 10 +std::string copy{str_with_len_N};/512_cv 9.02 % 9.46 % 10 +std::string copy{str_with_len_N};/1024_mean 99.1 ns 98.8 ns 10 +std::string copy{str_with_len_N};/1024_median 97.8 ns 97.3 ns 10 +std::string copy{str_with_len_N};/1024_stddev 5.07 ns 5.39 ns 10 +std::string copy{str_with_len_N};/1024_cv 5.11 % 5.45 % 10 +std::string copy{str_with_len_N};/2048_mean 140 ns 139 ns 10 +std::string copy{str_with_len_N};/2048_median 139 ns 138 ns 10 +std::string copy{str_with_len_N};/2048_stddev 10.2 ns 10.6 ns 10 +std::string copy{str_with_len_N};/2048_cv 7.27 % 7.64 % 10 +std::string copy{str_with_len_N};/4096_mean 187 ns 186 ns 10 +std::string copy{str_with_len_N};/4096_median 186 ns 184 ns 10 +std::string copy{str_with_len_N};/4096_stddev 5.96 ns 7.18 ns 10 +std::string copy{str_with_len_N};/4096_cv 3.19 % 3.86 % 10 +stringa copy{str_with_len_N};/15_mean 4.03 ns 4.03 ns 10 +stringa copy{str_with_len_N};/15_median 4.03 ns 4.04 ns 10 +stringa copy{str_with_len_N};/15_stddev 0.040 ns 0.063 ns 10 +stringa copy{str_with_len_N};/15_cv 0.99 % 1.57 % 10 +stringa copy{str_with_len_N};/16_mean 4.09 ns 4.08 ns 10 +stringa copy{str_with_len_N};/16_median 4.08 ns 4.08 ns 10 +stringa copy{str_with_len_N};/16_stddev 0.074 ns 0.074 ns 10 +stringa copy{str_with_len_N};/16_cv 1.81 % 1.81 % 10 +stringa copy{str_with_len_N};/23_mean 4.06 ns 4.05 ns 10 +stringa copy{str_with_len_N};/23_median 4.04 ns 4.01 ns 10 +stringa copy{str_with_len_N};/23_stddev 0.085 ns 0.102 ns 10 +stringa copy{str_with_len_N};/23_cv 2.10 % 2.53 % 10 +stringa copy{str_with_len_N};/24_mean 18.7 ns 18.7 ns 10 stringa copy{str_with_len_N};/24_median 18.6 ns 18.6 ns 10 -stringa copy{str_with_len_N};/24_stddev 0.128 ns 0.293 ns 10 -stringa copy{str_with_len_N};/24_cv 0.68 % 1.57 % 10 +stringa copy{str_with_len_N};/24_stddev 0.551 ns 0.529 ns 10 +stringa copy{str_with_len_N};/24_cv 2.95 % 2.84 % 10 stringa copy{str_with_len_N};/32_mean 18.6 ns 18.5 ns 10 -stringa copy{str_with_len_N};/32_median 18.6 ns 18.4 ns 10 -stringa copy{str_with_len_N};/32_stddev 0.118 ns 0.243 ns 10 -stringa copy{str_with_len_N};/32_cv 0.64 % 1.31 % 10 -stringa copy{str_with_len_N};/64_mean 18.6 ns 18.6 ns 10 -stringa copy{str_with_len_N};/64_median 18.6 ns 18.6 ns 10 -stringa copy{str_with_len_N};/64_stddev 0.168 ns 0.221 ns 10 -stringa copy{str_with_len_N};/64_cv 0.90 % 1.18 % 10 -stringa copy{str_with_len_N};/128_mean 18.6 ns 18.5 ns 10 -stringa copy{str_with_len_N};/128_median 18.6 ns 18.4 ns 10 -stringa copy{str_with_len_N};/128_stddev 0.180 ns 0.243 ns 10 -stringa copy{str_with_len_N};/128_cv 0.97 % 1.31 % 10 -stringa copy{str_with_len_N};/256_mean 18.6 ns 18.5 ns 10 -stringa copy{str_with_len_N};/256_median 18.6 ns 18.4 ns 10 -stringa copy{str_with_len_N};/256_stddev 0.089 ns 0.283 ns 10 -stringa copy{str_with_len_N};/256_cv 0.48 % 1.53 % 10 -stringa copy{str_with_len_N};/512_mean 18.7 ns 18.6 ns 10 -stringa copy{str_with_len_N};/512_median 18.6 ns 18.4 ns 10 -stringa copy{str_with_len_N};/512_stddev 0.388 ns 0.324 ns 10 -stringa copy{str_with_len_N};/512_cv 2.07 % 1.74 % 10 -stringa copy{str_with_len_N};/1024_mean 18.6 ns 18.6 ns 10 -stringa copy{str_with_len_N};/1024_median 18.6 ns 18.4 ns 10 -stringa copy{str_with_len_N};/1024_stddev 0.199 ns 0.268 ns 10 -stringa copy{str_with_len_N};/1024_cv 1.07 % 1.44 % 10 -stringa copy{str_with_len_N};/2048_mean 18.8 ns 18.5 ns 10 -stringa copy{str_with_len_N};/2048_median 18.6 ns 18.4 ns 10 -stringa copy{str_with_len_N};/2048_stddev 0.774 ns 0.265 ns 10 -stringa copy{str_with_len_N};/2048_cv 4.11 % 1.43 % 10 -stringa copy{str_with_len_N};/4096_mean 18.5 ns 18.4 ns 10 +stringa copy{str_with_len_N};/32_median 18.5 ns 18.4 ns 10 +stringa copy{str_with_len_N};/32_stddev 0.450 ns 0.618 ns 10 +stringa copy{str_with_len_N};/32_cv 2.42 % 3.34 % 10 +stringa copy{str_with_len_N};/64_mean 18.9 ns 18.7 ns 10 +stringa copy{str_with_len_N};/64_median 18.4 ns 18.4 ns 10 +stringa copy{str_with_len_N};/64_stddev 0.854 ns 0.887 ns 10 +stringa copy{str_with_len_N};/64_cv 4.51 % 4.75 % 10 +stringa copy{str_with_len_N};/128_mean 18.4 ns 18.3 ns 10 +stringa copy{str_with_len_N};/128_median 18.3 ns 18.4 ns 10 +stringa copy{str_with_len_N};/128_stddev 0.179 ns 0.345 ns 10 +stringa copy{str_with_len_N};/128_cv 0.98 % 1.88 % 10 +stringa copy{str_with_len_N};/256_mean 18.6 ns 18.4 ns 10 +stringa copy{str_with_len_N};/256_median 18.4 ns 18.4 ns 10 +stringa copy{str_with_len_N};/256_stddev 0.484 ns 0.441 ns 10 +stringa copy{str_with_len_N};/256_cv 2.60 % 2.40 % 10 +stringa copy{str_with_len_N};/512_mean 19.5 ns 19.4 ns 10 +stringa copy{str_with_len_N};/512_median 19.7 ns 19.3 ns 10 +stringa copy{str_with_len_N};/512_stddev 1.11 ns 1.27 ns 10 +stringa copy{str_with_len_N};/512_cv 5.69 % 6.52 % 10 +stringa copy{str_with_len_N};/1024_mean 18.3 ns 18.2 ns 10 +stringa copy{str_with_len_N};/1024_median 18.3 ns 18.4 ns 10 +stringa copy{str_with_len_N};/1024_stddev 0.076 ns 0.293 ns 10 +stringa copy{str_with_len_N};/1024_cv 0.41 % 1.60 % 10 +stringa copy{str_with_len_N};/2048_mean 18.5 ns 18.3 ns 10 +stringa copy{str_with_len_N};/2048_median 18.4 ns 18.4 ns 10 +stringa copy{str_with_len_N};/2048_stddev 0.464 ns 0.324 ns 10 +stringa copy{str_with_len_N};/2048_cv 2.51 % 1.77 % 10 +stringa copy{str_with_len_N};/4096_mean 18.9 ns 18.8 ns 10 stringa copy{str_with_len_N};/4096_median 18.5 ns 18.4 ns 10 -stringa copy{str_with_len_N};/4096_stddev 0.111 ns 0.309 ns 10 -stringa copy{str_with_len_N};/4096_cv 0.60 % 1.68 % 10 -lstringa<16> copy{str_with_len_N};/15_mean 8.67 ns 8.66 ns 10 -lstringa<16> copy{str_with_len_N};/15_median 8.62 ns 8.58 ns 10 -lstringa<16> copy{str_with_len_N};/15_stddev 0.415 ns 0.409 ns 10 -lstringa<16> copy{str_with_len_N};/15_cv 4.78 % 4.72 % 10 -lstringa<16> copy{str_with_len_N};/16_mean 8.61 ns 8.58 ns 10 -lstringa<16> copy{str_with_len_N};/16_median 8.57 ns 8.54 ns 10 -lstringa<16> copy{str_with_len_N};/16_stddev 0.177 ns 0.138 ns 10 -lstringa<16> copy{str_with_len_N};/16_cv 2.06 % 1.60 % 10 -lstringa<16> copy{str_with_len_N};/23_mean 8.58 ns 8.56 ns 10 -lstringa<16> copy{str_with_len_N};/23_median 8.57 ns 8.54 ns 10 -lstringa<16> copy{str_with_len_N};/23_stddev 0.127 ns 0.173 ns 10 -lstringa<16> copy{str_with_len_N};/23_cv 1.48 % 2.03 % 10 -lstringa<16> copy{str_with_len_N};/24_mean 80.5 ns 80.1 ns 10 -lstringa<16> copy{str_with_len_N};/24_median 81.1 ns 79.5 ns 10 -lstringa<16> copy{str_with_len_N};/24_stddev 2.02 ns 2.43 ns 10 -lstringa<16> copy{str_with_len_N};/24_cv 2.50 % 3.03 % 10 -lstringa<16> copy{str_with_len_N};/32_mean 83.1 ns 81.6 ns 10 -lstringa<16> copy{str_with_len_N};/32_median 82.9 ns 82.7 ns 10 -lstringa<16> copy{str_with_len_N};/32_stddev 3.13 ns 3.12 ns 10 -lstringa<16> copy{str_with_len_N};/32_cv 3.76 % 3.82 % 10 -lstringa<16> copy{str_with_len_N};/64_mean 83.1 ns 82.5 ns 10 -lstringa<16> copy{str_with_len_N};/64_median 83.1 ns 83.7 ns 10 -lstringa<16> copy{str_with_len_N};/64_stddev 2.31 ns 2.47 ns 10 -lstringa<16> copy{str_with_len_N};/64_cv 2.78 % 3.00 % 10 -lstringa<16> copy{str_with_len_N};/128_mean 86.5 ns 85.6 ns 10 -lstringa<16> copy{str_with_len_N};/128_median 86.4 ns 85.4 ns 10 -lstringa<16> copy{str_with_len_N};/128_stddev 1.40 ns 0.990 ns 10 -lstringa<16> copy{str_with_len_N};/128_cv 1.61 % 1.16 % 10 -lstringa<16> copy{str_with_len_N};/256_mean 89.8 ns 88.7 ns 10 -lstringa<16> copy{str_with_len_N};/256_median 89.3 ns 87.9 ns 10 -lstringa<16> copy{str_with_len_N};/256_stddev 3.02 ns 2.65 ns 10 -lstringa<16> copy{str_with_len_N};/256_cv 3.37 % 2.98 % 10 -lstringa<16> copy{str_with_len_N};/512_mean 90.8 ns 90.2 ns 10 -lstringa<16> copy{str_with_len_N};/512_median 90.4 ns 90.0 ns 10 -lstringa<16> copy{str_with_len_N};/512_stddev 2.53 ns 2.87 ns 10 -lstringa<16> copy{str_with_len_N};/512_cv 2.78 % 3.18 % 10 -lstringa<16> copy{str_with_len_N};/1024_mean 101 ns 99.6 ns 10 -lstringa<16> copy{str_with_len_N};/1024_median 101 ns 98.4 ns 10 -lstringa<16> copy{str_with_len_N};/1024_stddev 4.94 ns 3.97 ns 10 -lstringa<16> copy{str_with_len_N};/1024_cv 4.88 % 3.99 % 10 -lstringa<16> copy{str_with_len_N};/2048_mean 131 ns 130 ns 10 -lstringa<16> copy{str_with_len_N};/2048_median 129 ns 128 ns 10 -lstringa<16> copy{str_with_len_N};/2048_stddev 4.11 ns 4.60 ns 10 -lstringa<16> copy{str_with_len_N};/2048_cv 3.13 % 3.55 % 10 -lstringa<16> copy{str_with_len_N};/4096_mean 192 ns 189 ns 10 -lstringa<16> copy{str_with_len_N};/4096_median 192 ns 188 ns 10 -lstringa<16> copy{str_with_len_N};/4096_stddev 4.74 ns 2.65 ns 10 -lstringa<16> copy{str_with_len_N};/4096_cv 2.47 % 1.40 % 10 -lstringa<512> copy{str_with_len_N};/15_mean 8.47 ns 8.46 ns 10 -lstringa<512> copy{str_with_len_N};/15_median 8.45 ns 8.46 ns 10 -lstringa<512> copy{str_with_len_N};/15_stddev 0.064 ns 0.092 ns 10 -lstringa<512> copy{str_with_len_N};/15_cv 0.76 % 1.09 % 10 -lstringa<512> copy{str_with_len_N};/16_mean 8.59 ns 8.54 ns 10 -lstringa<512> copy{str_with_len_N};/16_median 8.59 ns 8.58 ns 10 -lstringa<512> copy{str_with_len_N};/16_stddev 0.112 ns 0.165 ns 10 -lstringa<512> copy{str_with_len_N};/16_cv 1.31 % 1.93 % 10 -lstringa<512> copy{str_with_len_N};/23_mean 8.48 ns 8.48 ns 10 -lstringa<512> copy{str_with_len_N};/23_median 8.47 ns 8.48 ns 10 -lstringa<512> copy{str_with_len_N};/23_stddev 0.099 ns 0.110 ns 10 -lstringa<512> copy{str_with_len_N};/23_cv 1.16 % 1.30 % 10 -lstringa<512> copy{str_with_len_N};/24_mean 8.60 ns 8.42 ns 10 -lstringa<512> copy{str_with_len_N};/24_median 8.49 ns 8.37 ns 10 -lstringa<512> copy{str_with_len_N};/24_stddev 0.400 ns 0.165 ns 10 -lstringa<512> copy{str_with_len_N};/24_cv 4.65 % 1.96 % 10 -lstringa<512> copy{str_with_len_N};/32_mean 11.7 ns 11.5 ns 10 -lstringa<512> copy{str_with_len_N};/32_median 11.5 ns 11.5 ns 10 -lstringa<512> copy{str_with_len_N};/32_stddev 0.459 ns 0.365 ns 10 -lstringa<512> copy{str_with_len_N};/32_cv 3.93 % 3.16 % 10 -lstringa<512> copy{str_with_len_N};/64_mean 11.6 ns 11.6 ns 10 -lstringa<512> copy{str_with_len_N};/64_median 11.6 ns 11.6 ns 10 -lstringa<512> copy{str_with_len_N};/64_stddev 0.274 ns 0.171 ns 10 -lstringa<512> copy{str_with_len_N};/64_cv 2.36 % 1.48 % 10 -lstringa<512> copy{str_with_len_N};/128_mean 11.9 ns 11.9 ns 10 -lstringa<512> copy{str_with_len_N};/128_median 11.9 ns 11.8 ns 10 -lstringa<512> copy{str_with_len_N};/128_stddev 0.201 ns 0.236 ns 10 -lstringa<512> copy{str_with_len_N};/128_cv 1.69 % 1.99 % 10 -lstringa<512> copy{str_with_len_N};/256_mean 13.0 ns 12.9 ns 10 +stringa copy{str_with_len_N};/4096_stddev 0.764 ns 0.878 ns 10 +stringa copy{str_with_len_N};/4096_cv 4.04 % 4.68 % 10 +lstringa<16> copy{str_with_len_N};/15_mean 7.85 ns 7.85 ns 10 +lstringa<16> copy{str_with_len_N};/15_median 7.76 ns 7.76 ns 10 +lstringa<16> copy{str_with_len_N};/15_stddev 0.249 ns 0.273 ns 10 +lstringa<16> copy{str_with_len_N};/15_cv 3.17 % 3.47 % 10 +lstringa<16> copy{str_with_len_N};/16_mean 8.07 ns 7.95 ns 10 +lstringa<16> copy{str_with_len_N};/16_median 7.84 ns 7.67 ns 10 +lstringa<16> copy{str_with_len_N};/16_stddev 0.878 ns 0.831 ns 10 +lstringa<16> copy{str_with_len_N};/16_cv 10.88 % 10.45 % 10 +lstringa<16> copy{str_with_len_N};/23_mean 7.94 ns 7.81 ns 10 +lstringa<16> copy{str_with_len_N};/23_median 7.84 ns 7.85 ns 10 +lstringa<16> copy{str_with_len_N};/23_stddev 0.303 ns 0.110 ns 10 +lstringa<16> copy{str_with_len_N};/23_cv 3.82 % 1.41 % 10 +lstringa<16> copy{str_with_len_N};/24_mean 82.8 ns 82.5 ns 10 +lstringa<16> copy{str_with_len_N};/24_median 82.6 ns 82.8 ns 10 +lstringa<16> copy{str_with_len_N};/24_stddev 1.55 ns 2.02 ns 10 +lstringa<16> copy{str_with_len_N};/24_cv 1.87 % 2.45 % 10 +lstringa<16> copy{str_with_len_N};/32_mean 85.5 ns 85.4 ns 10 +lstringa<16> copy{str_with_len_N};/32_median 85.5 ns 85.8 ns 10 +lstringa<16> copy{str_with_len_N};/32_stddev 1.49 ns 1.92 ns 10 +lstringa<16> copy{str_with_len_N};/32_cv 1.74 % 2.25 % 10 +lstringa<16> copy{str_with_len_N};/64_mean 85.1 ns 84.9 ns 10 +lstringa<16> copy{str_with_len_N};/64_median 84.2 ns 83.7 ns 10 +lstringa<16> copy{str_with_len_N};/64_stddev 2.49 ns 2.47 ns 10 +lstringa<16> copy{str_with_len_N};/64_cv 2.93 % 2.91 % 10 +lstringa<16> copy{str_with_len_N};/128_mean 89.8 ns 89.4 ns 10 +lstringa<16> copy{str_with_len_N};/128_median 89.0 ns 88.9 ns 10 +lstringa<16> copy{str_with_len_N};/128_stddev 2.82 ns 2.80 ns 10 +lstringa<16> copy{str_with_len_N};/128_cv 3.13 % 3.13 % 10 +lstringa<16> copy{str_with_len_N};/256_mean 655 ns 649 ns 10 +lstringa<16> copy{str_with_len_N};/256_median 653 ns 642 ns 10 +lstringa<16> copy{str_with_len_N};/256_stddev 12.4 ns 13.6 ns 10 +lstringa<16> copy{str_with_len_N};/256_cv 1.90 % 2.09 % 10 +lstringa<16> copy{str_with_len_N};/512_mean 92.5 ns 91.6 ns 10 +lstringa<16> copy{str_with_len_N};/512_median 92.8 ns 91.6 ns 10 +lstringa<16> copy{str_with_len_N};/512_stddev 3.03 ns 2.50 ns 10 +lstringa<16> copy{str_with_len_N};/512_cv 3.28 % 2.73 % 10 +lstringa<16> copy{str_with_len_N};/1024_mean 101 ns 98.9 ns 10 +lstringa<16> copy{str_with_len_N};/1024_median 99.0 ns 97.7 ns 10 +lstringa<16> copy{str_with_len_N};/1024_stddev 5.09 ns 5.55 ns 10 +lstringa<16> copy{str_with_len_N};/1024_cv 5.06 % 5.61 % 10 +lstringa<16> copy{str_with_len_N};/2048_mean 132 ns 131 ns 10 +lstringa<16> copy{str_with_len_N};/2048_median 131 ns 130 ns 10 +lstringa<16> copy{str_with_len_N};/2048_stddev 3.95 ns 4.45 ns 10 +lstringa<16> copy{str_with_len_N};/2048_cv 2.99 % 3.40 % 10 +lstringa<16> copy{str_with_len_N};/4096_mean 196 ns 194 ns 10 +lstringa<16> copy{str_with_len_N};/4096_median 197 ns 195 ns 10 +lstringa<16> copy{str_with_len_N};/4096_stddev 8.06 ns 8.83 ns 10 +lstringa<16> copy{str_with_len_N};/4096_cv 4.11 % 4.56 % 10 +lstringa<512> copy{str_with_len_N};/15_mean 8.62 ns 8.58 ns 10 +lstringa<512> copy{str_with_len_N};/15_median 8.51 ns 8.54 ns 10 +lstringa<512> copy{str_with_len_N};/15_stddev 0.324 ns 0.356 ns 10 +lstringa<512> copy{str_with_len_N};/15_cv 3.76 % 4.15 % 10 +lstringa<512> copy{str_with_len_N};/16_mean 8.94 ns 8.84 ns 10 +lstringa<512> copy{str_with_len_N};/16_median 8.65 ns 8.63 ns 10 +lstringa<512> copy{str_with_len_N};/16_stddev 0.625 ns 0.688 ns 10 +lstringa<512> copy{str_with_len_N};/16_cv 6.99 % 7.78 % 10 +lstringa<512> copy{str_with_len_N};/23_mean 8.67 ns 8.58 ns 10 +lstringa<512> copy{str_with_len_N};/23_median 8.53 ns 8.58 ns 10 +lstringa<512> copy{str_with_len_N};/23_stddev 0.469 ns 0.463 ns 10 +lstringa<512> copy{str_with_len_N};/23_cv 5.41 % 5.39 % 10 +lstringa<512> copy{str_with_len_N};/24_mean 8.44 ns 8.39 ns 10 +lstringa<512> copy{str_with_len_N};/24_median 8.45 ns 8.37 ns 10 +lstringa<512> copy{str_with_len_N};/24_stddev 0.183 ns 0.208 ns 10 +lstringa<512> copy{str_with_len_N};/24_cv 2.17 % 2.48 % 10 +lstringa<512> copy{str_with_len_N};/32_mean 12.0 ns 11.9 ns 10 +lstringa<512> copy{str_with_len_N};/32_median 11.9 ns 11.9 ns 10 +lstringa<512> copy{str_with_len_N};/32_stddev 0.246 ns 0.275 ns 10 +lstringa<512> copy{str_with_len_N};/32_cv 2.06 % 2.31 % 10 +lstringa<512> copy{str_with_len_N};/64_mean 12.1 ns 12.0 ns 10 +lstringa<512> copy{str_with_len_N};/64_median 12.0 ns 12.0 ns 10 +lstringa<512> copy{str_with_len_N};/64_stddev 0.503 ns 0.321 ns 10 +lstringa<512> copy{str_with_len_N};/64_cv 4.16 % 2.68 % 10 +lstringa<512> copy{str_with_len_N};/128_mean 12.3 ns 12.2 ns 10 +lstringa<512> copy{str_with_len_N};/128_median 12.3 ns 12.2 ns 10 +lstringa<512> copy{str_with_len_N};/128_stddev 0.130 ns 0.178 ns 10 +lstringa<512> copy{str_with_len_N};/128_cv 1.06 % 1.46 % 10 +lstringa<512> copy{str_with_len_N};/256_mean 13.2 ns 13.0 ns 10 lstringa<512> copy{str_with_len_N};/256_median 12.9 ns 12.8 ns 10 -lstringa<512> copy{str_with_len_N};/256_stddev 0.235 ns 0.176 ns 10 -lstringa<512> copy{str_with_len_N};/256_cv 1.80 % 1.37 % 10 +lstringa<512> copy{str_with_len_N};/256_stddev 0.876 ns 0.958 ns 10 +lstringa<512> copy{str_with_len_N};/256_cv 6.66 % 7.35 % 10 lstringa<512> copy{str_with_len_N};/512_mean 14.6 ns 14.4 ns 10 -lstringa<512> copy{str_with_len_N};/512_median 14.5 ns 14.4 ns 10 -lstringa<512> copy{str_with_len_N};/512_stddev 0.500 ns 0.232 ns 10 -lstringa<512> copy{str_with_len_N};/512_cv 3.43 % 1.61 % 10 -lstringa<512> copy{str_with_len_N};/1024_mean 101 ns 100 ns 10 -lstringa<512> copy{str_with_len_N};/1024_median 99.2 ns 100 ns 10 -lstringa<512> copy{str_with_len_N};/1024_stddev 4.55 ns 3.64 ns 10 -lstringa<512> copy{str_with_len_N};/1024_cv 4.53 % 3.64 % 10 -lstringa<512> copy{str_with_len_N};/2048_mean 130 ns 129 ns 10 -lstringa<512> copy{str_with_len_N};/2048_median 129 ns 128 ns 10 -lstringa<512> copy{str_with_len_N};/2048_stddev 3.39 ns 3.90 ns 10 -lstringa<512> copy{str_with_len_N};/2048_cv 2.61 % 3.03 % 10 -lstringa<512> copy{str_with_len_N};/4096_mean 192 ns 192 ns 10 -lstringa<512> copy{str_with_len_N};/4096_median 192 ns 193 ns 10 -lstringa<512> copy{str_with_len_N};/4096_stddev 3.24 ns 3.85 ns 10 -lstringa<512> copy{str_with_len_N};/4096_cv 1.69 % 2.01 % 10 ------ Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 33.7 ns 33.5 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 33.7 ns 33.3 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 0.541 ns 0.756 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 1.60 % 2.26 % 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 17.9 ns 17.9 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 17.9 ns 17.6 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.358 ns 0.443 ns 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 2.00 % 2.48 % 10 -stringa s = "123456789"; int res = s.to_int_mean 15.4 ns 15.3 ns 10 -stringa s = "123456789"; int res = s.to_int_median 15.4 ns 15.4 ns 10 -stringa s = "123456789"; int res = s.to_int_stddev 0.153 ns 0.258 ns 10 -stringa s = "123456789"; int res = s.to_int_cv 1.00 % 1.69 % 10 -ssa s = "123456789"; int res = s.to_int_mean 15.1 ns 15.1 ns 10 -ssa s = "123456789"; int res = s.to_int_median 15.0 ns 15.1 ns 10 -ssa s = "123456789"; int res = s.to_int_stddev 0.250 ns 0.362 ns 10 -ssa s = "123456789"; int res = s.to_int_cv 1.66 % 2.41 % 10 -lstringa<20> s = "123456789"; int res = s.to_int_mean 14.9 ns 14.8 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_median 15.0 ns 14.9 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.290 ns 0.333 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_cv 1.94 % 2.24 % 10 ------ Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 36.1 ns 35.7 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 36.1 ns 36.0 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 0.420 ns 0.971 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 1.16 % 2.72 % 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 10.1 ns 10.0 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 10.1 ns 10.0 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.165 ns 0.208 ns 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 1.64 % 2.08 % 10 -stringa s = "abcDef"; int res = s.to_int_mean 13.8 ns 13.6 ns 10 -stringa s = "abcDef"; int res = s.to_int_median 13.6 ns 13.7 ns 10 -stringa s = "abcDef"; int res = s.to_int_stddev 0.516 ns 0.244 ns 10 -stringa s = "abcDef"; int res = s.to_int_cv 3.74 % 1.79 % 10 -ssa s = "abcDef"; int res = s.to_int_mean 12.8 ns 12.8 ns 10 -ssa s = "abcDef"; int res = s.to_int_median 12.8 ns 12.8 ns 10 -ssa s = "abcDef"; int res = s.to_int_stddev 0.202 ns 0.158 ns 10 -ssa s = "abcDef"; int res = s.to_int_cv 1.58 % 1.24 % 10 -lstringa<20> s = "abcDef"; int res = s.to_int_mean 12.8 ns 12.6 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_median 12.8 ns 12.6 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.167 ns 0.265 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_cv 1.30 % 2.09 % 10 ------ Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 48.8 ns 48.1 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 48.9 ns 48.4 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 1.84 ns 1.44 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 3.76 % 2.98 % 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 22.4 ns 22.2 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 22.3 ns 22.2 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 0.215 ns 0.366 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 0.96 % 1.65 % 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 19.0 ns 19.0 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 19.0 ns 18.8 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.223 ns 0.293 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 1.17 % 1.54 % 10 --- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << "abbaabbaabbaabba";_mean 5758 ns 5734 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_median 5729 ns 5720 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 141 ns 180 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_cv 2.44 % 3.13 % 10 -std::string str; ... str += "abbaabbaabbaabba";_mean 1327 ns 1318 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_median 1326 ns 1318 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_stddev 26.7 ns 25.6 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_cv 2.01 % 1.94 % 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 972 ns 963 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_median 953 ns 963 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 53.6 ns 39.5 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 5.52 % 4.10 % 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 539 ns 536 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_median 538 ns 537 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 13.9 ns 19.9 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 2.59 % 3.72 % 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 371 ns 370 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_median 371 ns 372 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 4.64 ns 9.50 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 1.25 % 2.57 % 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 235 ns 231 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 232 ns 229 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 7.10 ns 7.30 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 3.02 % 3.16 % 10 --- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 5986 ns 5984 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 5935 ns 5938 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 197 ns 196 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 3.29 % 3.27 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 3929 ns 3917 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_median 3847 ns 3850 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 165 ns 136 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 4.20 % 3.46 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 849 ns 837 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 843 ns 837 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 25.5 ns 18.4 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.00 % 2.20 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 550 ns 550 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 550 ns 544 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 12.6 ns 15.0 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.30 % 2.73 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 388 ns 383 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 387 ns 385 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 11.3 ns 9.11 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.91 % 2.38 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 271 ns 271 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 268 ns 267 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 6.37 ns 6.28 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.35 % 2.32 % 10 --- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 285644 ns 283121 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 284822 ns 282493 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 5319 ns 7516 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 1.86 % 2.65 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 194551 ns 194632 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 192304 ns 192540 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 4793 ns 5313 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.46 % 2.73 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 23615 ns 23490 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 23822 ns 23542 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 534 ns 626 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.26 % 2.67 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 22280 ns 22119 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 22301 ns 21973 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 236 ns 463 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.06 % 2.09 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 22335 ns 22119 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 22202 ns 21973 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 749 ns 566 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.35 % 2.56 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 21663 ns 21582 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 21492 ns 21484 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 516 ns 385 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.38 % 1.78 % 10 --- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var1 << str_var2;_mean 5491 ns 5500 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_median 5477 ns 5469 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_stddev 117 ns 177 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_cv 2.14 % 3.23 % 10 -std::string str; ... str += str_var1 + str_var2;_mean 3997 ns 3990 ns 10 -std::string str; ... str += str_var1 + str_var2;_median 3983 ns 3990 ns 10 -std::string str; ... str += str_var1 + str_var2;_stddev 96.0 ns 113 ns 10 -std::string str; ... str += str_var1 + str_var2;_cv 2.40 % 2.83 % 10 -lstringa<16> str; ... str += str_var1 + str_var2;_mean 958 ns 950 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_median 951 ns 952 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_stddev 33.2 ns 29.2 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_cv 3.47 % 3.08 % 10 -lstringa<128> str; ... str += str_var1 + str_var2;_mean 664 ns 661 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_median 637 ns 637 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_stddev 70.1 ns 70.9 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_cv 10.56 % 10.73 % 10 -lstringa<512> str; ... str += str_var1 + str_var2;_mean 483 ns 476 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_median 479 ns 476 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_stddev 16.5 ns 5.51 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_cv 3.42 % 1.16 % 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_mean 381 ns 375 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_median 375 ns 372 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 13.7 ns 15.5 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_cv 3.59 % 4.14 % 10 --- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; str << "test = " << k << " times";_mean 11615 ns 11579 ns 10 -std::stringstream str; str << "test = " << k << " times";_median 11545 ns 11440 ns 10 -std::stringstream str; str << "test = " << k << " times";_stddev 250 ns 271 ns 10 -std::stringstream str; str << "test = " << k << " times";_cv 2.15 % 2.34 % 10 -std::string str = "test = " + std::to_string(k) + " times";_mean 1260 ns 1256 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_median 1258 ns 1242 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_stddev 43.2 ns 50.9 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_cv 3.43 % 4.06 % 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 2855 ns 2846 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 2847 ns 2846 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 56.7 ns 39.5 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 1.98 % 1.39 % 10 -std::string str = std::format("test = {} times", k);_mean 2420 ns 2399 ns 10 -std::string str = std::format("test = {} times", k);_median 2407 ns 2403 ns 10 -std::string str = std::format("test = {} times", k);_stddev 56.2 ns 39.7 ns 10 -std::string str = std::format("test = {} times", k);_cv 2.32 % 1.66 % 10 -lstringa<8> str; str.format("test = {} times", k);_mean 2609 ns 2585 ns 10 -lstringa<8> str; str.format("test = {} times", k);_median 2633 ns 2609 ns 10 -lstringa<8> str; str.format("test = {} times", k);_stddev 64.8 ns 63.7 ns 10 -lstringa<8> str; str.format("test = {} times", k);_cv 2.48 % 2.47 % 10 -lstringa<32> str; str.format("test = {} times", k);_mean 1549 ns 1545 ns 10 -lstringa<32> str; str.format("test = {} times", k);_median 1544 ns 1535 ns 10 -lstringa<32> str; str.format("test = {} times", k);_stddev 22.3 ns 23.5 ns 10 -lstringa<32> str; str.format("test = {} times", k);_cv 1.44 % 1.52 % 10 -lstringa<8> str = "test = " + k + " times";_mean 949 ns 935 ns 10 -lstringa<8> str = "test = " + k + " times";_median 932 ns 921 ns 10 -lstringa<8> str = "test = " + k + " times";_stddev 47.9 ns 44.2 ns 10 -lstringa<8> str = "test = " + k + " times";_cv 5.05 % 4.72 % 10 -lstringa<32> str = "test = " + k + " times";_mean 191 ns 190 ns 10 -lstringa<32> str = "test = " + k + " times";_median 191 ns 190 ns 10 -lstringa<32> str = "test = " + k + " times";_stddev 3.14 ns 4.78 ns 10 -lstringa<32> str = "test = " + k + " times";_cv 1.64 % 2.51 % 10 -stringa str = "test = " + k + " times";_mean 241 ns 239 ns 10 -stringa str = "test = " + k + " times";_median 240 ns 241 ns 10 -stringa str = "test = " + k + " times";_stddev 2.40 ns 5.54 ns 10 -stringa str = "test = " + k + " times";_cv 1.00 % 2.32 % 10 --- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find + substr + std::strtol_mean 555 ns 547 ns 10 -std::string::find + substr + std::strtol_median 553 ns 547 ns 10 -std::string::find + substr + std::strtol_stddev 16.8 ns 12.8 ns 10 -std::string::find + substr + std::strtol_cv 3.02 % 2.33 % 10 -ssa::splitter + ssa::as_int_mean 289 ns 288 ns 10 -ssa::splitter + ssa::as_int_median 289 ns 286 ns 10 -ssa::splitter + ssa::as_int_stddev 7.31 ns 9.10 ns 10 -ssa::splitter + ssa::as_int_cv 2.53 % 3.16 % 10 -ssa::splitf + functor_mean 207 ns 207 ns 10 -ssa::splitf + functor_median 206 ns 209 ns 10 -ssa::splitf + functor_stddev 3.00 ns 2.70 ns 10 -ssa::splitf + functor_cv 1.45 % 1.30 % 10 --- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Naive (and wrong) replace symbols with std::string find + replace_mean 1303 ns 1294 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_median 1294 ns 1290 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_stddev 44.5 ns 53.1 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_cv 3.42 % 4.11 % 10 -replace symbols with std::string find_first_of + replace_mean 2205 ns 2204 ns 10 -replace symbols with std::string find_first_of + replace_median 2177 ns 2176 ns 10 -replace symbols with std::string find_first_of + replace_stddev 62.9 ns 68.3 ns 10 -replace symbols with std::string find_first_of + replace_cv 2.85 % 3.10 % 10 -replace symbols with std::string_view find_first_of + copy_mean 2625 ns 2595 ns 10 -replace symbols with std::string_view find_first_of + copy_median 2598 ns 2567 ns 10 -replace symbols with std::string_view find_first_of + copy_stddev 88.9 ns 80.0 ns 10 -replace symbols with std::string_view find_first_of + copy_cv 3.39 % 3.08 % 10 -replace runtime symbols with string expressions and without remembering all search results_mean 1555 ns 1542 ns 10 -replace runtime symbols with string expressions and without remembering all search results_median 1558 ns 1535 ns 10 -replace runtime symbols with string expressions and without remembering all search results_stddev 33.3 ns 43.6 ns 10 -replace runtime symbols with string expressions and without remembering all search results_cv 2.14 % 2.82 % 10 -replace runtime symbols with simstr and memorization of all search results_mean 1382 ns 1381 ns 10 -replace runtime symbols with simstr and memorization of all search results_median 1376 ns 1381 ns 10 -replace runtime symbols with simstr and memorization of all search results_stddev 22.5 ns 29.6 ns 10 -replace runtime symbols with simstr and memorization of all search results_cv 1.63 % 2.14 % 10 -replace const symbols with string expressions and without remembering all search results_mean 1277 ns 1268 ns 10 -replace const symbols with string expressions and without remembering all search results_median 1275 ns 1271 ns 10 -replace const symbols with string expressions and without remembering all search results_stddev 18.6 ns 21.9 ns 10 -replace const symbols with string expressions and without remembering all search results_cv 1.46 % 1.73 % 10 -replace const symbols with string expressions and memorization of all search results_mean 1266 ns 1256 ns 10 -replace const symbols with string expressions and memorization of all search results_median 1253 ns 1256 ns 10 -replace const symbols with string expressions and memorization of all search results_stddev 43.0 ns 37.2 ns 10 -replace const symbols with string expressions and memorization of all search results_cv 3.40 % 2.96 % 10 --- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Short Naive (and wrong) replace symbols with std::string find + replace_mean 329 ns 328 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_median 328 ns 328 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_stddev 10.2 ns 9.86 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_cv 3.12 % 3.01 % 10 -Short replace symbols with std::string find_first_of + replace_mean 429 ns 428 ns 10 -Short replace symbols with std::string find_first_of + replace_median 427 ns 424 ns 10 -Short replace symbols with std::string find_first_of + replace_stddev 7.85 ns 10.1 ns 10 -Short replace symbols with std::string find_first_of + replace_cv 1.83 % 2.37 % 10 -Short replace symbols with std::string_view find_first_of + copy_mean 363 ns 362 ns 10 -Short replace symbols with std::string_view find_first_of + copy_median 363 ns 364 ns 10 -Short replace symbols with std::string_view find_first_of + copy_stddev 7.84 ns 8.87 ns 10 -Short replace symbols with std::string_view find_first_of + copy_cv 2.16 % 2.45 % 10 -Short replace runtime symbols with string expressions and without remembering all search results_mean 279 ns 278 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_median 279 ns 276 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_stddev 5.50 ns 4.24 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_cv 1.97 % 1.52 % 10 -Short replace runtime symbols with simstr and memorization of all search results_mean 389 ns 384 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_median 387 ns 384 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_stddev 14.2 ns 13.0 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_cv 3.65 % 3.39 % 10 -Short replace const symbols with string expressions and without remembering all search results_mean 248 ns 244 ns 10 -Short replace const symbols with string expressions and without remembering all search results_median 246 ns 246 ns 10 -Short replace const symbols with string expressions and without remembering all search results_stddev 10.1 ns 6.86 ns 10 -Short replace const symbols with string expressions and without remembering all search results_cv 4.09 % 2.81 % 10 -Short replace const symbols with string expressions and memorization of all search results_mean 354 ns 352 ns 10 -Short replace const symbols with string expressions and memorization of all search results_median 349 ns 353 ns 10 -Short replace const symbols with string expressions and memorization of all search results_stddev 14.4 ns 12.8 ns 10 -Short replace const symbols with string expressions and memorization of all search results_cv 4.07 % 3.63 % 10 ------ Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to ---- in std::string|64_mean 245 ns 243 ns 10 -replace bb to ---- in std::string|64_median 246 ns 246 ns 10 -replace bb to ---- in std::string|64_stddev 3.99 ns 5.42 ns 10 -replace bb to ---- in std::string|64_cv 1.63 % 2.23 % 10 -replace bb to ---- in std::string|256_mean 852 ns 849 ns 10 -replace bb to ---- in std::string|256_median 846 ns 846 ns 10 -replace bb to ---- in std::string|256_stddev 23.7 ns 24.7 ns 10 -replace bb to ---- in std::string|256_cv 2.78 % 2.91 % 10 -replace bb to ---- in std::string|512_mean 1534 ns 1521 ns 10 -replace bb to ---- in std::string|512_median 1522 ns 1517 ns 10 -replace bb to ---- in std::string|512_stddev 51.7 ns 59.7 ns 10 -replace bb to ---- in std::string|512_cv 3.37 % 3.93 % 10 -replace bb to ---- in std::string|1024_mean 3381 ns 3354 ns 10 -replace bb to ---- in std::string|1024_median 3379 ns 3369 ns 10 -replace bb to ---- in std::string|1024_stddev 92.1 ns 83.2 ns 10 -replace bb to ---- in std::string|1024_cv 2.72 % 2.48 % 10 -replace bb to ---- in std::string|2048_mean 8081 ns 8057 ns 10 -replace bb to ---- in std::string|2048_median 8100 ns 8022 ns 10 -replace bb to ---- in std::string|2048_stddev 97.1 ns 110 ns 10 -replace bb to ---- in std::string|2048_cv 1.20 % 1.37 % 10 -replace bb to ---- in lstringa<8>|64_mean 349 ns 346 ns 10 -replace bb to ---- in lstringa<8>|64_median 347 ns 345 ns 10 -replace bb to ---- in lstringa<8>|64_stddev 11.2 ns 12.2 ns 10 -replace bb to ---- in lstringa<8>|64_cv 3.21 % 3.54 % 10 -replace bb to ---- in lstringa<8>|256_mean 702 ns 696 ns 10 -replace bb to ---- in lstringa<8>|256_median 690 ns 684 ns 10 -replace bb to ---- in lstringa<8>|256_stddev 29.3 ns 28.2 ns 10 -replace bb to ---- in lstringa<8>|256_cv 4.18 % 4.06 % 10 -replace bb to ---- in lstringa<8>|512_mean 1187 ns 1183 ns 10 -replace bb to ---- in lstringa<8>|512_median 1180 ns 1172 ns 10 -replace bb to ---- in lstringa<8>|512_stddev 29.9 ns 42.0 ns 10 -replace bb to ---- in lstringa<8>|512_cv 2.52 % 3.55 % 10 -replace bb to ---- in lstringa<8>|1024_mean 2087 ns 2068 ns 10 -replace bb to ---- in lstringa<8>|1024_median 2075 ns 2063 ns 10 -replace bb to ---- in lstringa<8>|1024_stddev 38.1 ns 61.2 ns 10 -replace bb to ---- in lstringa<8>|1024_cv 1.82 % 2.96 % 10 -replace bb to ---- in lstringa<8>|2048_mean 4039 ns 3999 ns 10 -replace bb to ---- in lstringa<8>|2048_median 4012 ns 3990 ns 10 -replace bb to ---- in lstringa<8>|2048_stddev 145 ns 90.2 ns 10 -replace bb to ---- in lstringa<8>|2048_cv 3.58 % 2.25 % 10 -replace bb to ---- by init stringa|64_mean 230 ns 228 ns 10 -replace bb to ---- by init stringa|64_median 229 ns 225 ns 10 -replace bb to ---- by init stringa|64_stddev 7.53 ns 6.62 ns 10 -replace bb to ---- by init stringa|64_cv 3.27 % 2.90 % 10 -replace bb to ---- by init stringa|256_mean 573 ns 572 ns 10 -replace bb to ---- by init stringa|256_median 574 ns 578 ns 10 -replace bb to ---- by init stringa|256_stddev 10.1 ns 16.8 ns 10 -replace bb to ---- by init stringa|256_cv 1.77 % 2.94 % 10 -replace bb to ---- by init stringa|512_mean 1009 ns 1011 ns 10 -replace bb to ---- by init stringa|512_median 1006 ns 1004 ns 10 -replace bb to ---- by init stringa|512_stddev 13.1 ns 14.1 ns 10 -replace bb to ---- by init stringa|512_cv 1.30 % 1.40 % 10 -replace bb to ---- by init stringa|1024_mean 1988 ns 1963 ns 10 -replace bb to ---- by init stringa|1024_median 1918 ns 1925 ns 10 -replace bb to ---- by init stringa|1024_stddev 165 ns 127 ns 10 -replace bb to ---- by init stringa|1024_cv 8.31 % 6.47 % 10 -replace bb to ---- by init stringa|2048_mean 3790 ns 3775 ns 10 -replace bb to ---- by init stringa|2048_median 3702 ns 3706 ns 10 -replace bb to ---- by init stringa|2048_stddev 230 ns 184 ns 10 -replace bb to ---- by init stringa|2048_cv 6.07 % 4.87 % 10 ------ Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to -- in std::string|64_mean 218 ns 218 ns 10 -replace bb to -- in std::string|64_median 216 ns 215 ns 10 -replace bb to -- in std::string|64_stddev 8.42 ns 8.90 ns 10 -replace bb to -- in std::string|64_cv 3.85 % 4.08 % 10 -replace bb to -- in std::string|256_mean 539 ns 539 ns 10 -replace bb to -- in std::string|256_median 537 ns 537 ns 10 -replace bb to -- in std::string|256_stddev 10.6 ns 16.4 ns 10 -replace bb to -- in std::string|256_cv 1.97 % 3.04 % 10 -replace bb to -- in std::string|512_mean 979 ns 977 ns 10 -replace bb to -- in std::string|512_median 976 ns 973 ns 10 -replace bb to -- in std::string|512_stddev 20.3 ns 28.0 ns 10 -replace bb to -- in std::string|512_cv 2.07 % 2.86 % 10 -replace bb to -- in std::string|1024_mean 1885 ns 1873 ns 10 -replace bb to -- in std::string|1024_median 1840 ns 1814 ns 10 -replace bb to -- in std::string|1024_stddev 134 ns 148 ns 10 -replace bb to -- in std::string|1024_cv 7.09 % 7.91 % 10 -replace bb to -- in std::string|2048_mean 3576 ns 3560 ns 10 -replace bb to -- in std::string|2048_median 3558 ns 3530 ns 10 -replace bb to -- in std::string|2048_stddev 87.0 ns 97.1 ns 10 -replace bb to -- in std::string|2048_cv 2.43 % 2.73 % 10 -replace bb to -- in lstringa<8>|64_mean 202 ns 199 ns 10 -replace bb to -- in lstringa<8>|64_median 199 ns 201 ns 10 -replace bb to -- in lstringa<8>|64_stddev 10.2 ns 8.88 ns 10 -replace bb to -- in lstringa<8>|64_cv 5.05 % 4.47 % 10 -replace bb to -- in lstringa<8>|256_mean 470 ns 467 ns 10 -replace bb to -- in lstringa<8>|256_median 471 ns 471 ns 10 -replace bb to -- in lstringa<8>|256_stddev 11.5 ns 8.82 ns 10 -replace bb to -- in lstringa<8>|256_cv 2.45 % 1.89 % 10 -replace bb to -- in lstringa<8>|512_mean 816 ns 814 ns 10 -replace bb to -- in lstringa<8>|512_median 810 ns 802 ns 10 -replace bb to -- in lstringa<8>|512_stddev 20.9 ns 18.5 ns 10 -replace bb to -- in lstringa<8>|512_cv 2.56 % 2.27 % 10 -replace bb to -- in lstringa<8>|1024_mean 1515 ns 1504 ns 10 -replace bb to -- in lstringa<8>|1024_median 1506 ns 1507 ns 10 -replace bb to -- in lstringa<8>|1024_stddev 41.4 ns 43.0 ns 10 -replace bb to -- in lstringa<8>|1024_cv 2.73 % 2.86 % 10 -replace bb to -- in lstringa<8>|2048_mean 2909 ns 2875 ns 10 -replace bb to -- in lstringa<8>|2048_median 2897 ns 2856 ns 10 -replace bb to -- in lstringa<8>|2048_stddev 63.6 ns 57.7 ns 10 -replace bb to -- in lstringa<8>|2048_cv 2.19 % 2.01 % 10 -replace bb to -- by init stringa|64_mean 183 ns 181 ns 10 -replace bb to -- by init stringa|64_median 180 ns 180 ns 10 -replace bb to -- by init stringa|64_stddev 5.34 ns 5.44 ns 10 -replace bb to -- by init stringa|64_cv 2.92 % 3.00 % 10 -replace bb to -- by init stringa|256_mean 392 ns 384 ns 10 -replace bb to -- by init stringa|256_median 388 ns 381 ns 10 -replace bb to -- by init stringa|256_stddev 12.6 ns 14.8 ns 10 -replace bb to -- by init stringa|256_cv 3.21 % 3.87 % 10 -replace bb to -- by init stringa|512_mean 668 ns 657 ns 10 -replace bb to -- by init stringa|512_median 660 ns 663 ns 10 -replace bb to -- by init stringa|512_stddev 16.9 ns 14.4 ns 10 -replace bb to -- by init stringa|512_cv 2.53 % 2.18 % 10 -replace bb to -- by init stringa|1024_mean 1201 ns 1197 ns 10 -replace bb to -- by init stringa|1024_median 1201 ns 1200 ns 10 -replace bb to -- by init stringa|1024_stddev 21.6 ns 24.4 ns 10 -replace bb to -- by init stringa|1024_cv 1.80 % 2.04 % 10 -replace bb to -- by init stringa|2048_mean 2295 ns 2285 ns 10 -replace bb to -- by init stringa|2048_median 2275 ns 2295 ns 10 -replace bb to -- by init stringa|2048_stddev 50.8 ns 55.4 ns 10 -replace bb to -- by init stringa|2048_cv 2.21 % 2.43 % 10 ------ Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -hashStrMapA emplace & find stringa;_mean 4237335 ns 4230925 ns 10 -hashStrMapA emplace & find stringa;_median 4253455 ns 4261364 ns 10 -hashStrMapA emplace & find stringa;_stddev 162581 ns 151627 ns 10 -hashStrMapA emplace & find stringa;_cv 3.84 % 3.58 % 10 -std::unordered_map emplace & find std::string;_mean 5468019 ns 5343750 ns 10 -std::unordered_map emplace & find std::string;_median 5365539 ns 5312500 ns 10 -std::unordered_map emplace & find std::string;_stddev 272590 ns 98821 ns 10 -std::unordered_map emplace & find std::string;_cv 4.99 % 1.85 % 10 -hashStrMapA emplace & find ssa;_mean 3990921 ns 3919344 ns 10 -hashStrMapA emplace & find ssa;_median 3971040 ns 3928073 ns 10 -hashStrMapA emplace & find ssa;_stddev 113397 ns 145193 ns 10 -hashStrMapA emplace & find ssa;_cv 2.84 % 3.70 % 10 -std::unordered_map emplace & find std::string_view;_mean 6304651 ns 6305804 ns 10 -std::unordered_map emplace & find std::string_view;_median 6263162 ns 6277902 ns 10 -std::unordered_map emplace & find std::string_view;_stddev 161063 ns 171495 ns 10 -std::unordered_map emplace & find std::string_view;_cv 2.55 % 2.72 % 10 ------ Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -Build func full name std::string;_mean 1660 ns 1638 ns 10 -Build func full name std::string;_median 1637 ns 1650 ns 10 -Build func full name std::string;_stddev 56.0 ns 25.9 ns 10 -Build func full name std::string;_cv 3.37 % 1.58 % 10 -Build func full name std::string 1;_mean 1747 ns 1737 ns 10 -Build func full name std::string 1;_median 1738 ns 1709 ns 10 -Build func full name std::string 1;_stddev 50.9 ns 51.5 ns 10 -Build func full name std::string 1;_cv 2.91 % 2.96 % 10 -Build func full name std::stream;_mean 9942 ns 9647 ns 10 -Build func full name std::stream;_median 9768 ns 9626 ns 10 -Build func full name std::stream;_stddev 436 ns 287 ns 10 -Build func full name std::stream;_cv 4.38 % 2.97 % 10 -Build func full name stringa;_mean 891 ns 872 ns 10 -Build func full name stringa;_median 879 ns 872 ns 10 -Build func full name stringa;_stddev 31.8 ns 16.4 ns 10 -Build func full name stringa;_cv 3.57 % 1.89 % 10 -Build func full name stringa 1;_mean 1007 ns 1001 ns 10 -Build func full name stringa 1;_median 998 ns 1001 ns 10 -Build func full name stringa 1;_stddev 33.0 ns 25.7 ns 10 -Build func full name stringa 1;_cv 3.28 % 2.57 % 10 +lstringa<512> copy{str_with_len_N};/512_median 14.6 ns 14.4 ns 10 +lstringa<512> copy{str_with_len_N};/512_stddev 0.416 ns 0.362 ns 10 +lstringa<512> copy{str_with_len_N};/512_cv 2.84 % 2.51 % 10 +lstringa<512> copy{str_with_len_N};/1024_mean 98.2 ns 97.9 ns 10 +lstringa<512> copy{str_with_len_N};/1024_median 99.0 ns 98.4 ns 10 +lstringa<512> copy{str_with_len_N};/1024_stddev 3.15 ns 3.24 ns 10 +lstringa<512> copy{str_with_len_N};/1024_cv 3.21 % 3.31 % 10 +lstringa<512> copy{str_with_len_N};/2048_mean 131 ns 130 ns 10 +lstringa<512> copy{str_with_len_N};/2048_median 131 ns 132 ns 10 +lstringa<512> copy{str_with_len_N};/2048_stddev 3.47 ns 3.03 ns 10 +lstringa<512> copy{str_with_len_N};/2048_cv 2.66 % 2.33 % 10 +lstringa<512> copy{str_with_len_N};/4096_mean 195 ns 193 ns 10 +lstringa<512> copy{str_with_len_N};/4096_median 193 ns 193 ns 10 +lstringa<512> copy{str_with_len_N};/4096_stddev 8.17 ns 8.37 ns 10 +lstringa<512> copy{str_with_len_N};/4096_cv 4.18 % 4.35 % 10 +----- Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 32.4 ns 32.2 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 32.5 ns 32.1 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 0.397 ns 0.455 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 1.23 % 1.42 % 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 15.0 ns 15.0 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 15.1 ns 15.2 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.852 ns 0.770 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 5.68 % 5.14 % 10 +stringa s = "123456789"; int res = s.to_int_mean 15.3 ns 15.1 ns 10 +stringa s = "123456789"; int res = s.to_int_median 14.9 ns 14.9 ns 10 +stringa s = "123456789"; int res = s.to_int_stddev 0.752 ns 0.501 ns 10 +stringa s = "123456789"; int res = s.to_int_cv 4.93 % 3.32 % 10 +ssa s = "123456789"; int res = s.to_int_mean 16.2 ns 15.8 ns 10 +ssa s = "123456789"; int res = s.to_int_median 16.3 ns 15.5 ns 10 +ssa s = "123456789"; int res = s.to_int_stddev 0.833 ns 0.768 ns 10 +ssa s = "123456789"; int res = s.to_int_cv 5.13 % 4.87 % 10 +lstringa<20> s = "123456789"; int res = s.to_int_mean 15.9 ns 15.5 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_median 16.0 ns 15.5 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_stddev 0.591 ns 0.499 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_cv 3.71 % 3.22 % 10 +----- Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 35.7 ns 35.3 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 35.6 ns 35.7 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 0.826 ns 0.617 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 2.31 % 1.75 % 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 9.90 ns 9.75 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 9.83 ns 9.84 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 0.322 ns 0.176 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 3.25 % 1.81 % 10 +stringa s = "abcDef"; int res = s.to_int_mean 14.6 ns 14.3 ns 10 +stringa s = "abcDef"; int res = s.to_int_median 14.5 ns 14.2 ns 10 +stringa s = "abcDef"; int res = s.to_int_stddev 0.426 ns 0.353 ns 10 +stringa s = "abcDef"; int res = s.to_int_cv 2.93 % 2.46 % 10 +ssa s = "abcDef"; int res = s.to_int_mean 14.0 ns 13.6 ns 10 +ssa s = "abcDef"; int res = s.to_int_median 13.8 ns 13.7 ns 10 +ssa s = "abcDef"; int res = s.to_int_stddev 0.442 ns 0.176 ns 10 +ssa s = "abcDef"; int res = s.to_int_cv 3.16 % 1.30 % 10 +lstringa<20> s = "abcDef"; int res = s.to_int_mean 13.9 ns 13.7 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_median 13.6 ns 13.5 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_stddev 0.600 ns 0.368 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_cv 4.32 % 2.69 % 10 +----- Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 47.2 ns 46.1 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 47.6 ns 45.4 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 1.81 ns 1.51 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 3.83 % 3.28 % 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 20.0 ns 19.8 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 20.1 ns 20.1 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 1.14 ns 1.26 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 5.72 % 6.38 % 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 18.5 ns 18.2 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 18.3 ns 18.2 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.872 ns 0.630 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 4.71 % 3.47 % 10 +----- Convert to double '1234.567e10' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_mean 106 ns 103 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_median 106 ns 101 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_stddev 3.88 ns 5.53 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_cv 3.67 % 5.35 % 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_mean 85.6 ns 83.4 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_median 85.1 ns 82.8 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_stddev 3.98 ns 2.30 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_cv 4.65 % 2.75 % 10 +ssa s = "1234.567e10"; double res = *s.to_double()_mean 37.7 ns 37.1 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_median 37.8 ns 37.7 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_stddev 1.27 ns 1.26 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_cv 3.38 % 3.38 % 10 +-- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << "abbaabbaabbaabba";_mean 5830 ns 5720 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_median 5859 ns 5650 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 286 ns 218 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_cv 4.90 % 3.81 % 10 +std::string str; ... str += "abbaabbaabbaabba";_mean 1313 ns 1300 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_median 1287 ns 1287 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_stddev 60.3 ns 44.9 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_cv 4.59 % 3.45 % 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 973 ns 958 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_median 958 ns 952 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 47.7 ns 38.0 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 4.90 % 3.96 % 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 541 ns 539 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_median 542 ns 539 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 10.1 ns 13.3 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 1.87 % 2.46 % 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 365 ns 363 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_median 363 ns 361 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 11.3 ns 12.0 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 3.11 % 3.30 % 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 254 ns 251 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 252 ns 254 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 9.08 ns 6.52 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 3.57 % 2.60 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 5571 ns 5547 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 5587 ns 5625 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 161 ns 184 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 2.88 % 3.32 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 4182 ns 4187 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_median 4019 ns 4051 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 473 ns 453 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 11.30 % 10.83 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 827 ns 818 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 821 ns 816 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 13.5 ns 15.4 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 1.63 % 1.89 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 542 ns 534 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 537 ns 530 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 18.1 ns 6.74 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.34 % 1.26 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 381 ns 380 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 376 ns 372 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 15.9 ns 18.4 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 4.17 % 4.83 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 271 ns 270 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 269 ns 270 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 7.20 ns 6.62 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.66 % 2.45 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 284627 ns 281865 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 284009 ns 282493 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 11243 ns 7516 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 3.95 % 2.67 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 193928 ns 192121 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 193685 ns 192540 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 4904 ns 3665 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.53 % 1.91 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 23525 ns 23333 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 23269 ns 23280 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 737 ns 505 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.13 % 2.17 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 22444 ns 22168 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 22628 ns 22217 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 812 ns 1035 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.62 % 4.67 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 22848 ns 22656 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 22732 ns 22705 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 519 ns 573 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.27 % 2.53 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 21680 ns 21484 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 21456 ns 21484 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 666 ns 515 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.07 % 2.40 % 10 +-- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var1 << str_var2;_mean 5453 ns 5406 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_median 5451 ns 5391 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_stddev 231 ns 168 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_cv 4.24 % 3.11 % 10 +std::string str; ... str += str_var1 + str_var2;_mean 4415 ns 4371 ns 10 +std::string str; ... str += str_var1 + str_var2;_median 4393 ns 4353 ns 10 +std::string str; ... str += str_var1 + str_var2;_stddev 385 ns 377 ns 10 +std::string str; ... str += str_var1 + str_var2;_cv 8.72 % 8.63 % 10 +lstringa<16> str; ... str += str_var1 + str_var2;_mean 959 ns 942 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_median 940 ns 921 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_stddev 57.9 ns 45.2 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_cv 6.04 % 4.80 % 10 +lstringa<128> str; ... str += str_var1 + str_var2;_mean 656 ns 646 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_median 647 ns 642 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_stddev 28.2 ns 18.7 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_cv 4.30 % 2.89 % 10 +lstringa<512> str; ... str += str_var1 + str_var2;_mean 484 ns 478 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_median 483 ns 481 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_stddev 14.5 ns 9.93 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_cv 3.00 % 2.08 % 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_mean 388 ns 382 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_median 379 ns 377 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 30.0 ns 22.8 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_cv 7.74 % 5.96 % 10 +-- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; str << "test = " << k << " times";_mean 12174 ns 12137 ns 10 +std::stringstream str; str << "test = " << k << " times";_median 11764 ns 11719 ns 10 +std::stringstream str; str << "test = " << k << " times";_stddev 1156 ns 1164 ns 10 +std::stringstream str; str << "test = " << k << " times";_cv 9.50 % 9.59 % 10 +std::string str = "test = " + std::to_string(k) + " times";_mean 1244 ns 1239 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_median 1242 ns 1242 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_stddev 22.1 ns 27.0 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_cv 1.78 % 2.18 % 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 2886 ns 2856 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 2866 ns 2825 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 70.1 ns 79.7 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 2.43 % 2.79 % 10 +std::string str = std::format("test = {} times", k);_mean 2480 ns 2455 ns 10 +std::string str = std::format("test = {} times", k);_median 2463 ns 2426 ns 10 +std::string str = std::format("test = {} times", k);_stddev 103 ns 102 ns 10 +std::string str = std::format("test = {} times", k);_cv 4.16 % 4.13 % 10 +lstringa<8> str; str.format("test = {} times", k);_mean 2641 ns 2621 ns 10 +lstringa<8> str; str.format("test = {} times", k);_median 2628 ns 2609 ns 10 +lstringa<8> str; str.format("test = {} times", k);_stddev 73.3 ns 67.3 ns 10 +lstringa<8> str; str.format("test = {} times", k);_cv 2.77 % 2.57 % 10 +lstringa<32> str; str.format("test = {} times", k);_mean 1551 ns 1538 ns 10 +lstringa<32> str; str.format("test = {} times", k);_median 1550 ns 1535 ns 10 +lstringa<32> str; str.format("test = {} times", k);_stddev 30.9 ns 25.7 ns 10 +lstringa<32> str; str.format("test = {} times", k);_cv 1.99 % 1.67 % 10 +lstringa<8> str = "test = " + k + " times";_mean 911 ns 906 ns 10 +lstringa<8> str = "test = " + k + " times";_median 912 ns 903 ns 10 +lstringa<8> str = "test = " + k + " times";_stddev 19.4 ns 18.0 ns 10 +lstringa<8> str = "test = " + k + " times";_cv 2.13 % 1.99 % 10 +lstringa<32> str = "test = " + k + " times";_mean 195 ns 192 ns 10 +lstringa<32> str = "test = " + k + " times";_median 192 ns 190 ns 10 +lstringa<32> str = "test = " + k + " times";_stddev 5.69 ns 5.32 ns 10 +lstringa<32> str = "test = " + k + " times";_cv 2.92 % 2.77 % 10 +stringa str = "test = " + k + " times";_mean 247 ns 244 ns 10 +stringa str = "test = " + k + " times";_median 243 ns 244 ns 10 +stringa str = "test = " + k + " times";_stddev 11.5 ns 6.58 ns 10 +stringa str = "test = " + k + " times";_cv 4.68 % 2.69 % 10 +-- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find + substr + std::strtol_mean 571 ns 564 ns 10 +std::string::find + substr + std::strtol_median 562 ns 562 ns 10 +std::string::find + substr + std::strtol_stddev 24.3 ns 23.8 ns 10 +std::string::find + substr + std::strtol_cv 4.26 % 4.22 % 10 +ssa::splitter + ssa::as_int_mean 311 ns 304 ns 10 +ssa::splitter + ssa::as_int_median 308 ns 301 ns 10 +ssa::splitter + ssa::as_int_stddev 16.7 ns 10.4 ns 10 +ssa::splitter + ssa::as_int_cv 5.38 % 3.40 % 10 +ssa::splitf + functor_mean 220 ns 216 ns 10 +ssa::splitf + functor_median 217 ns 215 ns 10 +ssa::splitf + functor_stddev 7.86 ns 6.11 ns 10 +ssa::splitf + functor_cv 3.58 % 2.83 % 10 +-- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Naive (and wrong) replace symbols with std::string find + replace_mean 1258 ns 1247 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_median 1241 ns 1228 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_stddev 44.5 ns 37.3 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_cv 3.54 % 2.99 % 10 +replace symbols with std::string find_first_of + replace_mean 2344 ns 2317 ns 10 +replace symbols with std::string find_first_of + replace_median 2350 ns 2312 ns 10 +replace symbols with std::string find_first_of + replace_stddev 183 ns 179 ns 10 +replace symbols with std::string find_first_of + replace_cv 7.80 % 7.74 % 10 +replace symbols with std::string_view find_first_of + copy_mean 2606 ns 2600 ns 10 +replace symbols with std::string_view find_first_of + copy_median 2547 ns 2511 ns 10 +replace symbols with std::string_view find_first_of + copy_stddev 175 ns 188 ns 10 +replace symbols with std::string_view find_first_of + copy_cv 6.70 % 7.23 % 10 +replace runtime symbols with string expressions and without remembering all search results_mean 1524 ns 1521 ns 10 +replace runtime symbols with string expressions and without remembering all search results_median 1515 ns 1517 ns 10 +replace runtime symbols with string expressions and without remembering all search results_stddev 48.0 ns 44.1 ns 10 +replace runtime symbols with string expressions and without remembering all search results_cv 3.15 % 2.90 % 10 +replace runtime symbols with simstr and memorization of all search results_mean 1405 ns 1390 ns 10 +replace runtime symbols with simstr and memorization of all search results_median 1399 ns 1381 ns 10 +replace runtime symbols with simstr and memorization of all search results_stddev 53.5 ns 45.2 ns 10 +replace runtime symbols with simstr and memorization of all search results_cv 3.81 % 3.25 % 10 +replace const symbols with string expressions and without remembering all search results_mean 1288 ns 1270 ns 10 +replace const symbols with string expressions and without remembering all search results_median 1278 ns 1256 ns 10 +replace const symbols with string expressions and without remembering all search results_stddev 56.7 ns 40.0 ns 10 +replace const symbols with string expressions and without remembering all search results_cv 4.40 % 3.15 % 10 +replace const symbols with string expressions and memorization of all search results_mean 1198 ns 1194 ns 10 +replace const symbols with string expressions and memorization of all search results_median 1197 ns 1200 ns 10 +replace const symbols with string expressions and memorization of all search results_stddev 26.6 ns 28.8 ns 10 +replace const symbols with string expressions and memorization of all search results_cv 2.22 % 2.41 % 10 +-- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Short Naive (and wrong) replace symbols with std::string find + replace_mean 346 ns 342 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_median 343 ns 342 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_stddev 8.86 ns 5.15 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_cv 2.56 % 1.50 % 10 +Short replace symbols with std::string find_first_of + replace_mean 435 ns 435 ns 10 +Short replace symbols with std::string find_first_of + replace_median 435 ns 435 ns 10 +Short replace symbols with std::string find_first_of + replace_stddev 15.1 ns 14.7 ns 10 +Short replace symbols with std::string find_first_of + replace_cv 3.48 % 3.39 % 10 +Short replace symbols with std::string_view find_first_of + copy_mean 381 ns 377 ns 10 +Short replace symbols with std::string_view find_first_of + copy_median 382 ns 377 ns 10 +Short replace symbols with std::string_view find_first_of + copy_stddev 19.3 ns 20.0 ns 10 +Short replace symbols with std::string_view find_first_of + copy_cv 5.07 % 5.31 % 10 +Short replace runtime symbols with string expressions and without remembering all search results_mean 277 ns 276 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_median 276 ns 276 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_stddev 6.52 ns 6.91 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_cv 2.35 % 2.51 % 10 +Short replace runtime symbols with simstr and memorization of all search results_mean 374 ns 374 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_median 374 ns 371 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_stddev 7.40 ns 9.60 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_cv 1.98 % 2.57 % 10 +Short replace const symbols with string expressions and without remembering all search results_mean 252 ns 251 ns 10 +Short replace const symbols with string expressions and without remembering all search results_median 250 ns 251 ns 10 +Short replace const symbols with string expressions and without remembering all search results_stddev 3.37 ns 4.72 ns 10 +Short replace const symbols with string expressions and without remembering all search results_cv 1.34 % 1.88 % 10 +Short replace const symbols with string expressions and memorization of all search results_mean 342 ns 341 ns 10 +Short replace const symbols with string expressions and memorization of all search results_median 331 ns 330 ns 10 +Short replace const symbols with string expressions and memorization of all search results_stddev 29.9 ns 31.1 ns 10 +Short replace const symbols with string expressions and memorization of all search results_cv 8.73 % 9.14 % 10 +----- Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to ---- in std::string|64_mean 248 ns 248 ns 10 +replace bb to ---- in std::string|64_median 245 ns 246 ns 10 +replace bb to ---- in std::string|64_stddev 8.91 ns 8.80 ns 10 +replace bb to ---- in std::string|64_cv 3.59 % 3.55 % 10 +replace bb to ---- in std::string|256_mean 807 ns 799 ns 10 +replace bb to ---- in std::string|256_median 803 ns 802 ns 10 +replace bb to ---- in std::string|256_stddev 23.6 ns 24.4 ns 10 +replace bb to ---- in std::string|256_cv 2.93 % 3.05 % 10 +replace bb to ---- in std::string|512_mean 1551 ns 1535 ns 10 +replace bb to ---- in std::string|512_median 1532 ns 1517 ns 10 +replace bb to ---- in std::string|512_stddev 79.4 ns 71.7 ns 10 +replace bb to ---- in std::string|512_cv 5.12 % 4.67 % 10 +replace bb to ---- in std::string|1024_mean 3622 ns 3610 ns 10 +replace bb to ---- in std::string|1024_median 3713 ns 3706 ns 10 +replace bb to ---- in std::string|1024_stddev 355 ns 361 ns 10 +replace bb to ---- in std::string|1024_cv 9.79 % 10.00 % 10 +replace bb to ---- in std::string|2048_mean 8251 ns 8126 ns 10 +replace bb to ---- in std::string|2048_median 8212 ns 8109 ns 10 +replace bb to ---- in std::string|2048_stddev 224 ns 187 ns 10 +replace bb to ---- in std::string|2048_cv 2.72 % 2.31 % 10 +replace bb to ---- in lstringa<8>|64_mean 331 ns 328 ns 10 +replace bb to ---- in lstringa<8>|64_median 329 ns 329 ns 10 +replace bb to ---- in lstringa<8>|64_stddev 13.1 ns 9.60 ns 10 +replace bb to ---- in lstringa<8>|64_cv 3.95 % 2.93 % 10 +replace bb to ---- in lstringa<8>|256_mean 685 ns 677 ns 10 +replace bb to ---- in lstringa<8>|256_median 689 ns 680 ns 10 +replace bb to ---- in lstringa<8>|256_stddev 11.8 ns 16.0 ns 10 +replace bb to ---- in lstringa<8>|256_cv 1.72 % 2.37 % 10 +replace bb to ---- in lstringa<8>|512_mean 1198 ns 1189 ns 10 +replace bb to ---- in lstringa<8>|512_median 1186 ns 1172 ns 10 +replace bb to ---- in lstringa<8>|512_stddev 44.1 ns 40.0 ns 10 +replace bb to ---- in lstringa<8>|512_cv 3.68 % 3.36 % 10 +replace bb to ---- in lstringa<8>|1024_mean 2107 ns 2090 ns 10 +replace bb to ---- in lstringa<8>|1024_median 2091 ns 2100 ns 10 +replace bb to ---- in lstringa<8>|1024_stddev 46.7 ns 30.9 ns 10 +replace bb to ---- in lstringa<8>|1024_cv 2.22 % 1.48 % 10 +replace bb to ---- in lstringa<8>|2048_mean 4065 ns 3972 ns 10 +replace bb to ---- in lstringa<8>|2048_median 4024 ns 3990 ns 10 +replace bb to ---- in lstringa<8>|2048_stddev 156 ns 147 ns 10 +replace bb to ---- in lstringa<8>|2048_cv 3.84 % 3.70 % 10 +replace bb to ---- by init stringa|64_mean 230 ns 227 ns 10 +replace bb to ---- by init stringa|64_median 230 ns 228 ns 10 +replace bb to ---- by init stringa|64_stddev 9.24 ns 7.88 ns 10 +replace bb to ---- by init stringa|64_cv 4.01 % 3.47 % 10 +replace bb to ---- by init stringa|256_mean 582 ns 582 ns 10 +replace bb to ---- by init stringa|256_median 584 ns 586 ns 10 +replace bb to ---- by init stringa|256_stddev 11.2 ns 13.2 ns 10 +replace bb to ---- by init stringa|256_cv 1.93 % 2.28 % 10 +replace bb to ---- by init stringa|512_mean 1007 ns 999 ns 10 +replace bb to ---- by init stringa|512_median 1000 ns 989 ns 10 +replace bb to ---- by init stringa|512_stddev 32.1 ns 40.6 ns 10 +replace bb to ---- by init stringa|512_cv 3.19 % 4.07 % 10 +replace bb to ---- by init stringa|1024_mean 1913 ns 1875 ns 10 +replace bb to ---- by init stringa|1024_median 1878 ns 1842 ns 10 +replace bb to ---- by init stringa|1024_stddev 90.7 ns 70.6 ns 10 +replace bb to ---- by init stringa|1024_cv 4.74 % 3.76 % 10 +replace bb to ---- by init stringa|2048_mean 3605 ns 3557 ns 10 +replace bb to ---- by init stringa|2048_median 3575 ns 3557 ns 10 +replace bb to ---- by init stringa|2048_stddev 96.4 ns 44.1 ns 10 +replace bb to ---- by init stringa|2048_cv 2.67 % 1.24 % 10 +----- Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to -- in std::string|64_mean 206 ns 206 ns 10 +replace bb to -- in std::string|64_median 208 ns 208 ns 10 +replace bb to -- in std::string|64_stddev 4.04 ns 5.04 ns 10 +replace bb to -- in std::string|64_cv 1.96 % 2.45 % 10 +replace bb to -- in std::string|256_mean 533 ns 529 ns 10 +replace bb to -- in std::string|256_median 530 ns 530 ns 10 +replace bb to -- in std::string|256_stddev 13.4 ns 12.2 ns 10 +replace bb to -- in std::string|256_cv 2.51 % 2.31 % 10 +replace bb to -- in std::string|512_mean 968 ns 963 ns 10 +replace bb to -- in std::string|512_median 958 ns 963 ns 10 +replace bb to -- in std::string|512_stddev 22.6 ns 29.6 ns 10 +replace bb to -- in std::string|512_cv 2.34 % 3.07 % 10 +replace bb to -- in std::string|1024_mean 1840 ns 1837 ns 10 +replace bb to -- in std::string|1024_median 1821 ns 1800 ns 10 +replace bb to -- in std::string|1024_stddev 47.0 ns 53.9 ns 10 +replace bb to -- in std::string|1024_cv 2.55 % 2.93 % 10 +replace bb to -- in std::string|2048_mean 3641 ns 3618 ns 10 +replace bb to -- in std::string|2048_median 3590 ns 3610 ns 10 +replace bb to -- in std::string|2048_stddev 149 ns 116 ns 10 +replace bb to -- in std::string|2048_cv 4.08 % 3.21 % 10 +replace bb to -- in lstringa<8>|64_mean 200 ns 198 ns 10 +replace bb to -- in lstringa<8>|64_median 198 ns 195 ns 10 +replace bb to -- in lstringa<8>|64_stddev 8.44 ns 7.53 ns 10 +replace bb to -- in lstringa<8>|64_cv 4.22 % 3.81 % 10 +replace bb to -- in lstringa<8>|256_mean 475 ns 472 ns 10 +replace bb to -- in lstringa<8>|256_median 464 ns 469 ns 10 +replace bb to -- in lstringa<8>|256_stddev 25.0 ns 17.7 ns 10 +replace bb to -- in lstringa<8>|256_cv 5.27 % 3.76 % 10 +replace bb to -- in lstringa<8>|512_mean 816 ns 809 ns 10 +replace bb to -- in lstringa<8>|512_median 818 ns 811 ns 10 +replace bb to -- in lstringa<8>|512_stddev 6.07 ns 16.8 ns 10 +replace bb to -- in lstringa<8>|512_cv 0.74 % 2.08 % 10 +replace bb to -- in lstringa<8>|1024_mean 1508 ns 1507 ns 10 +replace bb to -- in lstringa<8>|1024_median 1498 ns 1500 ns 10 +replace bb to -- in lstringa<8>|1024_stddev 27.1 ns 27.5 ns 10 +replace bb to -- in lstringa<8>|1024_cv 1.80 % 1.83 % 10 +replace bb to -- in lstringa<8>|2048_mean 2969 ns 2930 ns 10 +replace bb to -- in lstringa<8>|2048_median 2940 ns 2930 ns 10 +replace bb to -- in lstringa<8>|2048_stddev 84.7 ns 48.8 ns 10 +replace bb to -- in lstringa<8>|2048_cv 2.85 % 1.67 % 10 +replace bb to -- by init stringa|64_mean 192 ns 191 ns 10 +replace bb to -- by init stringa|64_median 185 ns 184 ns 10 +replace bb to -- by init stringa|64_stddev 20.4 ns 20.8 ns 10 +replace bb to -- by init stringa|64_cv 10.64 % 10.87 % 10 +replace bb to -- by init stringa|256_mean 392 ns 389 ns 10 +replace bb to -- by init stringa|256_median 388 ns 390 ns 10 +replace bb to -- by init stringa|256_stddev 19.1 ns 17.9 ns 10 +replace bb to -- by init stringa|256_cv 4.86 % 4.59 % 10 +replace bb to -- by init stringa|512_mean 660 ns 658 ns 10 +replace bb to -- by init stringa|512_median 655 ns 656 ns 10 +replace bb to -- by init stringa|512_stddev 21.3 ns 22.6 ns 10 +replace bb to -- by init stringa|512_cv 3.22 % 3.43 % 10 +replace bb to -- by init stringa|1024_mean 1196 ns 1186 ns 10 +replace bb to -- by init stringa|1024_median 1192 ns 1186 ns 10 +replace bb to -- by init stringa|1024_stddev 31.1 ns 30.1 ns 10 +replace bb to -- by init stringa|1024_cv 2.60 % 2.54 % 10 +replace bb to -- by init stringa|2048_mean 2432 ns 2433 ns 10 +replace bb to -- by init stringa|2048_median 2355 ns 2354 ns 10 +replace bb to -- by init stringa|2048_stddev 223 ns 207 ns 10 +replace bb to -- by init stringa|2048_cv 9.18 % 8.50 % 10 +----- Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +hashStrMapA emplace & find stringa;_mean 4270225 ns 4248047 ns 10 +hashStrMapA emplace & find stringa;_median 4314802 ns 4248047 ns 10 +hashStrMapA emplace & find stringa;_stddev 184022 ns 179775 ns 10 +hashStrMapA emplace & find stringa;_cv 4.31 % 4.23 % 10 +std::unordered_map emplace & find std::string;_mean 5385050 ns 5312500 ns 10 +std::unordered_map emplace & find std::string;_median 5346964 ns 5312500 ns 10 +std::unordered_map emplace & find std::string;_stddev 133251 ns 0.000 ns 10 +std::unordered_map emplace & find std::string;_cv 2.47 % 0.00 % 10 +hashStrMapA emplace & find ssa;_mean 3953790 ns 3952206 ns 10 +hashStrMapA emplace & find ssa;_median 3948084 ns 3927139 ns 10 +hashStrMapA emplace & find ssa;_stddev 61645 ns 56396 ns 10 +hashStrMapA emplace & find ssa;_cv 1.56 % 1.43 % 10 +std::unordered_map emplace & find std::string_view;_mean 6874509 ns 6808036 ns 10 +std::unordered_map emplace & find std::string_view;_median 6862246 ns 6835938 ns 10 +std::unordered_map emplace & find std::string_view;_stddev 115202 ns 128200 ns 10 +std::unordered_map emplace & find std::string_view;_cv 1.68 % 1.88 % 10 +----- Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +Build func full name std::string;_mean 1651 ns 1632 ns 10 +Build func full name std::string;_median 1639 ns 1604 ns 10 +Build func full name std::string;_stddev 64.8 ns 63.3 ns 10 +Build func full name std::string;_cv 3.93 % 3.88 % 10 +Build func full name std::string 1;_mean 1706 ns 1669 ns 10 +Build func full name std::string 1;_median 1696 ns 1669 ns 10 +Build func full name std::string 1;_stddev 39.5 ns 41.4 ns 10 +Build func full name std::string 1;_cv 2.32 % 2.48 % 10 +Build func full name std::stream;_mean 9950 ns 9898 ns 10 +Build func full name std::stream;_median 9704 ns 9626 ns 10 +Build func full name std::stream;_stddev 674 ns 647 ns 10 +Build func full name std::stream;_cv 6.78 % 6.54 % 10 +Build func full name stringa;_mean 948 ns 947 ns 10 +Build func full name stringa;_median 920 ns 928 ns 10 +Build func full name stringa;_stddev 96.7 ns 96.8 ns 10 +Build func full name stringa;_cv 10.20 % 10.22 % 10 +Build func full name stringa 1;_mean 1108 ns 1108 ns 10 +Build func full name stringa 1;_median 1046 ns 1050 ns 10 +Build func full name stringa 1;_stddev 121 ns 125 ns 10 +Build func full name stringa 1;_cv 10.96 % 11.29 % 10 diff --git a/bench/results/004-Xeon E5-2682 v4, WASM Chrome, Clang-21.txt b/bench/results/004-Xeon E5-2682 v4, WASM Chrome, Clang-21.txt index ffd12b4..bbb75f6 100644 --- a/bench/results/004-Xeon E5-2682 v4, WASM Chrome, Clang-21.txt +++ b/bench/results/004-Xeon E5-2682 v4, WASM Chrome, Clang-21.txt @@ -1,783 +1,784 @@ Run on (32 X 2513.96 MHz CPU s) -Chrome 136.0.7103.114 webasm +Chromium: 142.0.7444.60 webasm -------------------------------------------------------------------------------------------------------------------------------------------------------- Benchmark Time CPU Iterations -------------------------------------------------------------------------------------------------------------------------------------------------------- ------ Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e;_mean 3.47 ns 3.47 ns 10 -std::string e;_median 3.46 ns 3.46 ns 10 -std::string e;_stddev 0.077 ns 0.077 ns 10 -std::string e;_cv 2.22 % 2.22 % 10 -std::string_view e;_mean 3.68 ns 3.68 ns 10 -std::string_view e;_median 3.68 ns 3.68 ns 10 -std::string_view e;_stddev 0.025 ns 0.025 ns 10 -std::string_view e;_cv 0.67 % 0.67 % 10 -ssa e;_mean 2.14 ns 2.14 ns 10 -ssa e;_median 2.14 ns 2.14 ns 10 -ssa e;_stddev 0.022 ns 0.022 ns 10 -ssa e;_cv 1.01 % 1.01 % 10 -stringa e;_mean 3.66 ns 3.66 ns 10 -stringa e;_median 3.66 ns 3.66 ns 10 -stringa e;_stddev 0.070 ns 0.070 ns 10 -stringa e;_cv 1.91 % 1.91 % 10 -lstringa<20> e;_mean 3.10 ns 3.10 ns 10 -lstringa<20> e;_median 3.05 ns 3.05 ns 10 -lstringa<20> e;_stddev 0.112 ns 0.112 ns 10 -lstringa<20> e;_cv 3.63 % 3.63 % 10 -lstringa<40> e;_mean 3.10 ns 3.10 ns 10 -lstringa<40> e;_median 3.10 ns 3.10 ns 10 -lstringa<40> e;_stddev 0.080 ns 0.080 ns 10 -lstringa<40> e;_cv 2.56 % 2.56 % 10 ------ Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text";_mean 4.95 ns 4.95 ns 10 -std::string e = "Test text";_median 4.93 ns 4.93 ns 10 -std::string e = "Test text";_stddev 0.074 ns 0.074 ns 10 -std::string e = "Test text";_cv 1.50 % 1.50 % 10 -std::string_view e = "Test text";_mean 2.22 ns 2.22 ns 10 -std::string_view e = "Test text";_median 2.22 ns 2.22 ns 10 -std::string_view e = "Test text";_stddev 0.024 ns 0.024 ns 10 -std::string_view e = "Test text";_cv 1.10 % 1.10 % 10 -ssa e = "Test text";_mean 2.18 ns 2.18 ns 10 -ssa e = "Test text";_median 2.18 ns 2.18 ns 10 -ssa e = "Test text";_stddev 0.021 ns 0.021 ns 10 -ssa e = "Test text";_cv 0.99 % 0.99 % 10 -stringa e = "Test text";_mean 4.69 ns 4.69 ns 10 -stringa e = "Test text";_median 4.67 ns 4.67 ns 10 -stringa e = "Test text";_stddev 0.087 ns 0.087 ns 10 -stringa e = "Test text";_cv 1.85 % 1.85 % 10 -lstringa<20> e = "Test text";_mean 6.54 ns 6.54 ns 10 -lstringa<20> e = "Test text";_median 6.54 ns 6.54 ns 10 -lstringa<20> e = "Test text";_stddev 0.109 ns 0.109 ns 10 -lstringa<20> e = "Test text";_cv 1.67 % 1.67 % 10 -lstringa<40> e = "Test text";_mean 4.02 ns 4.02 ns 10 -lstringa<40> e = "Test text";_median 4.01 ns 4.01 ns 10 -lstringa<40> e = "Test text";_stddev 0.090 ns 0.090 ns 10 -lstringa<40> e = "Test text";_cv 2.24 % 2.24 % 10 ------ Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890";_mean 56.3 ns 56.3 ns 10 -std::string e = "123456789012345678901234567890";_median 55.8 ns 55.8 ns 10 -std::string e = "123456789012345678901234567890";_stddev 2.07 ns 2.07 ns 10 -std::string e = "123456789012345678901234567890";_cv 3.67 % 3.67 % 10 -std::string_view e = "123456789012345678901234567890";_mean 5.05 ns 5.05 ns 10 -std::string_view e = "123456789012345678901234567890";_median 5.06 ns 5.06 ns 10 -std::string_view e = "123456789012345678901234567890";_stddev 0.026 ns 0.026 ns 10 -std::string_view e = "123456789012345678901234567890";_cv 0.52 % 0.52 % 10 -ssa e = "123456789012345678901234567890";_mean 2.18 ns 2.18 ns 10 -ssa e = "123456789012345678901234567890";_median 2.17 ns 2.17 ns 10 -ssa e = "123456789012345678901234567890";_stddev 0.031 ns 0.031 ns 10 -ssa e = "123456789012345678901234567890";_cv 1.40 % 1.40 % 10 -stringa e = "123456789012345678901234567890";_mean 5.33 ns 5.33 ns 10 -stringa e = "123456789012345678901234567890";_median 5.32 ns 5.32 ns 10 -stringa e = "123456789012345678901234567890";_stddev 0.033 ns 0.033 ns 10 -stringa e = "123456789012345678901234567890";_cv 0.63 % 0.63 % 10 -lstringa<20> e = "123456789012345678901234567890";_mean 59.7 ns 59.7 ns 10 -lstringa<20> e = "123456789012345678901234567890";_median 59.2 ns 59.2 ns 10 -lstringa<20> e = "123456789012345678901234567890";_stddev 1.30 ns 1.30 ns 10 -lstringa<20> e = "123456789012345678901234567890";_cv 2.18 % 2.18 % 10 -lstringa<40> e = "123456789012345678901234567890";_mean 6.28 ns 6.28 ns 10 -lstringa<40> e = "123456789012345678901234567890";_median 6.20 ns 6.20 ns 10 -lstringa<40> e = "123456789012345678901234567890";_stddev 0.202 ns 0.202 ns 10 -lstringa<40> e = "123456789012345678901234567890";_cv 3.21 % 3.21 % 10 ------ Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "Test text"; auto c{e};_mean 5.67 ns 5.67 ns 10 -std::string e = "Test text"; auto c{e};_median 5.66 ns 5.66 ns 10 -std::string e = "Test text"; auto c{e};_stddev 0.127 ns 0.127 ns 10 -std::string e = "Test text"; auto c{e};_cv 2.24 % 2.24 % 10 -std::string_view e = "Test text"; auto c{e};_mean 5.04 ns 5.04 ns 10 -std::string_view e = "Test text"; auto c{e};_median 5.03 ns 5.03 ns 10 -std::string_view e = "Test text"; auto c{e};_stddev 0.009 ns 0.009 ns 10 -std::string_view e = "Test text"; auto c{e};_cv 0.18 % 0.18 % 10 -ssa e = "Test text"; auto c{e};_mean 5.02 ns 5.02 ns 10 -ssa e = "Test text"; auto c{e};_median 5.02 ns 5.02 ns 10 -ssa e = "Test text"; auto c{e};_stddev 0.015 ns 0.015 ns 10 -ssa e = "Test text"; auto c{e};_cv 0.31 % 0.31 % 10 -stringa e = "Test text"; auto c{e};_mean 4.81 ns 4.81 ns 10 -stringa e = "Test text"; auto c{e};_median 4.80 ns 4.80 ns 10 -stringa e = "Test text"; auto c{e};_stddev 0.075 ns 0.075 ns 10 -stringa e = "Test text"; auto c{e};_cv 1.55 % 1.55 % 10 -lstringa<20> e = "Test text"; auto c{e};_mean 15.8 ns 15.8 ns 10 -lstringa<20> e = "Test text"; auto c{e};_median 15.5 ns 15.5 ns 10 -lstringa<20> e = "Test text"; auto c{e};_stddev 0.819 ns 0.819 ns 10 -lstringa<20> e = "Test text"; auto c{e};_cv 5.19 % 5.19 % 10 -lstringa<40> e = "Test text"; auto c{e};_mean 15.7 ns 15.7 ns 10 -lstringa<40> e = "Test text"; auto c{e};_median 15.7 ns 15.7 ns 10 -lstringa<40> e = "Test text"; auto c{e};_stddev 0.536 ns 0.536 ns 10 -lstringa<40> e = "Test text"; auto c{e};_cv 3.41 % 3.41 % 10 ------ Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string e = "123456789012345678901234567890"; auto c{e};_mean 116 ns 116 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_median 113 ns 113 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_stddev 5.88 ns 5.88 ns 10 -std::string e = "123456789012345678901234567890"; auto c{e};_cv 5.06 % 5.06 % 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 5.04 ns 5.04 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_median 5.03 ns 5.03 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.038 ns 0.038 ns 10 -std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 0.75 % 0.75 % 10 -ssa e = "123456789012345678901234567890"; auto c{e};_mean 2.20 ns 2.20 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_median 2.19 ns 2.19 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.038 ns 0.038 ns 10 -ssa e = "123456789012345678901234567890"; auto c{e};_cv 1.73 % 1.73 % 10 -stringa e = "123456789012345678901234567890"; auto c{e};_mean 5.36 ns 5.36 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_median 5.36 ns 5.36 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.068 ns 0.068 ns 10 -stringa e = "123456789012345678901234567890"; auto c{e};_cv 1.28 % 1.28 % 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 67.1 ns 67.1 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 67.0 ns 67.0 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 1.65 ns 1.65 ns 10 -lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 2.46 % 2.46 % 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 15.5 ns 15.5 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 15.5 ns 15.5 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.607 ns 0.607 ns 10 -lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 3.90 % 3.90 % 10 ------ Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find;_mean 141 ns 141 ns 10 -std::string::find;_median 138 ns 138 ns 10 -std::string::find;_stddev 7.07 ns 7.07 ns 10 -std::string::find;_cv 5.00 % 5.00 % 10 -std::string_view::find;_mean 134 ns 134 ns 10 -std::string_view::find;_median 133 ns 133 ns 10 -std::string_view::find;_stddev 4.94 ns 4.94 ns 10 -std::string_view::find;_cv 3.68 % 3.68 % 10 -ssa::find;_mean 101 ns 101 ns 10 +----- Create Empty Str ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e;_mean 5.87 ns 5.87 ns 10 +std::string e;_median 5.83 ns 5.83 ns 10 +std::string e;_stddev 0.100 ns 0.100 ns 10 +std::string e;_cv 1.71 % 1.71 % 10 +std::string_view e;_mean 5.26 ns 5.26 ns 10 +std::string_view e;_median 5.26 ns 5.26 ns 10 +std::string_view e;_stddev 0.022 ns 0.022 ns 10 +std::string_view e;_cv 0.43 % 0.43 % 10 +ssa e;_mean 4.67 ns 4.67 ns 10 +ssa e;_median 4.67 ns 4.67 ns 10 +ssa e;_stddev 0.023 ns 0.023 ns 10 +ssa e;_cv 0.50 % 0.49 % 10 +stringa e;_mean 4.82 ns 4.82 ns 10 +stringa e;_median 4.81 ns 4.81 ns 10 +stringa e;_stddev 0.040 ns 0.040 ns 10 +stringa e;_cv 0.83 % 0.83 % 10 +lstringa<20> e;_mean 4.64 ns 4.64 ns 10 +lstringa<20> e;_median 4.62 ns 4.62 ns 10 +lstringa<20> e;_stddev 0.076 ns 0.076 ns 10 +lstringa<20> e;_cv 1.63 % 1.63 % 10 +lstringa<40> e;_mean 4.76 ns 4.76 ns 10 +lstringa<40> e;_median 4.72 ns 4.72 ns 10 +lstringa<40> e;_stddev 0.128 ns 0.128 ns 10 +lstringa<40> e;_cv 2.68 % 2.68 % 10 +----- Create Str from short literal (9 symbols) --------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text";_mean 5.17 ns 5.17 ns 10 +std::string e = "Test text";_median 5.16 ns 5.16 ns 10 +std::string e = "Test text";_stddev 0.060 ns 0.060 ns 10 +std::string e = "Test text";_cv 1.16 % 1.16 % 10 +std::string_view e = "Test text";_mean 5.57 ns 5.57 ns 10 +std::string_view e = "Test text";_median 5.56 ns 5.56 ns 10 +std::string_view e = "Test text";_stddev 0.026 ns 0.026 ns 10 +std::string_view e = "Test text";_cv 0.47 % 0.47 % 10 +ssa e = "Test text";_mean 3.41 ns 3.41 ns 10 +ssa e = "Test text";_median 3.41 ns 3.41 ns 10 +ssa e = "Test text";_stddev 0.029 ns 0.029 ns 10 +ssa e = "Test text";_cv 0.84 % 0.84 % 10 +stringa e = "Test text";_mean 5.07 ns 5.07 ns 10 +stringa e = "Test text";_median 5.01 ns 5.01 ns 10 +stringa e = "Test text";_stddev 0.168 ns 0.168 ns 10 +stringa e = "Test text";_cv 3.32 % 3.32 % 10 +lstringa<20> e = "Test text";_mean 5.37 ns 5.37 ns 10 +lstringa<20> e = "Test text";_median 5.37 ns 5.37 ns 10 +lstringa<20> e = "Test text";_stddev 0.102 ns 0.102 ns 10 +lstringa<20> e = "Test text";_cv 1.90 % 1.90 % 10 +lstringa<40> e = "Test text";_mean 5.37 ns 5.37 ns 10 +lstringa<40> e = "Test text";_median 5.36 ns 5.36 ns 10 +lstringa<40> e = "Test text";_stddev 0.061 ns 0.061 ns 10 +lstringa<40> e = "Test text";_cv 1.13 % 1.13 % 10 +----- Create Str from long literal (30 symbols) ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890";_mean 63.4 ns 63.4 ns 10 +std::string e = "123456789012345678901234567890";_median 63.5 ns 63.5 ns 10 +std::string e = "123456789012345678901234567890";_stddev 2.12 ns 2.12 ns 10 +std::string e = "123456789012345678901234567890";_cv 3.35 % 3.35 % 10 +std::string_view e = "123456789012345678901234567890";_mean 5.58 ns 5.58 ns 10 +std::string_view e = "123456789012345678901234567890";_median 5.57 ns 5.57 ns 10 +std::string_view e = "123456789012345678901234567890";_stddev 0.045 ns 0.045 ns 10 +std::string_view e = "123456789012345678901234567890";_cv 0.81 % 0.81 % 10 +ssa e = "123456789012345678901234567890";_mean 3.33 ns 3.33 ns 10 +ssa e = "123456789012345678901234567890";_median 3.33 ns 3.33 ns 10 +ssa e = "123456789012345678901234567890";_stddev 0.026 ns 0.026 ns 10 +ssa e = "123456789012345678901234567890";_cv 0.78 % 0.78 % 10 +stringa e = "123456789012345678901234567890";_mean 4.95 ns 4.95 ns 10 +stringa e = "123456789012345678901234567890";_median 4.90 ns 4.90 ns 10 +stringa e = "123456789012345678901234567890";_stddev 0.103 ns 0.103 ns 10 +stringa e = "123456789012345678901234567890";_cv 2.08 % 2.08 % 10 +lstringa<20> e = "123456789012345678901234567890";_mean 63.1 ns 63.1 ns 10 +lstringa<20> e = "123456789012345678901234567890";_median 63.0 ns 63.0 ns 10 +lstringa<20> e = "123456789012345678901234567890";_stddev 2.03 ns 2.03 ns 10 +lstringa<20> e = "123456789012345678901234567890";_cv 3.22 % 3.22 % 10 +lstringa<40> e = "123456789012345678901234567890";_mean 5.86 ns 5.86 ns 10 +lstringa<40> e = "123456789012345678901234567890";_median 5.90 ns 5.90 ns 10 +lstringa<40> e = "123456789012345678901234567890";_stddev 0.090 ns 0.090 ns 10 +lstringa<40> e = "123456789012345678901234567890";_cv 1.53 % 1.53 % 10 +----- Create copy of Str with 9 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "Test text"; auto c{e};_mean 11.0 ns 11.0 ns 10 +std::string e = "Test text"; auto c{e};_median 11.0 ns 11.0 ns 10 +std::string e = "Test text"; auto c{e};_stddev 0.061 ns 0.061 ns 10 +std::string e = "Test text"; auto c{e};_cv 0.55 % 0.55 % 10 +std::string_view e = "Test text"; auto c{e};_mean 5.91 ns 5.91 ns 10 +std::string_view e = "Test text"; auto c{e};_median 5.91 ns 5.91 ns 10 +std::string_view e = "Test text"; auto c{e};_stddev 0.014 ns 0.014 ns 10 +std::string_view e = "Test text"; auto c{e};_cv 0.24 % 0.24 % 10 +ssa e = "Test text"; auto c{e};_mean 6.84 ns 6.84 ns 10 +ssa e = "Test text"; auto c{e};_median 6.85 ns 6.85 ns 10 +ssa e = "Test text"; auto c{e};_stddev 0.043 ns 0.043 ns 10 +ssa e = "Test text"; auto c{e};_cv 0.62 % 0.62 % 10 +stringa e = "Test text"; auto c{e};_mean 5.18 ns 5.18 ns 10 +stringa e = "Test text"; auto c{e};_median 5.15 ns 5.15 ns 10 +stringa e = "Test text"; auto c{e};_stddev 0.150 ns 0.150 ns 10 +stringa e = "Test text"; auto c{e};_cv 2.90 % 2.90 % 10 +lstringa<20> e = "Test text"; auto c{e};_mean 17.5 ns 17.5 ns 10 +lstringa<20> e = "Test text"; auto c{e};_median 17.5 ns 17.5 ns 10 +lstringa<20> e = "Test text"; auto c{e};_stddev 0.608 ns 0.608 ns 10 +lstringa<20> e = "Test text"; auto c{e};_cv 3.48 % 3.48 % 10 +lstringa<40> e = "Test text"; auto c{e};_mean 17.4 ns 17.4 ns 10 +lstringa<40> e = "Test text"; auto c{e};_median 17.5 ns 17.5 ns 10 +lstringa<40> e = "Test text"; auto c{e};_stddev 0.419 ns 0.419 ns 10 +lstringa<40> e = "Test text"; auto c{e};_cv 2.40 % 2.40 % 10 +----- Create copy of Str with 30 symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string e = "123456789012345678901234567890"; auto c{e};_mean 93.3 ns 93.3 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_median 92.5 ns 92.5 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_stddev 3.13 ns 3.13 ns 10 +std::string e = "123456789012345678901234567890"; auto c{e};_cv 3.35 % 3.35 % 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_mean 5.57 ns 5.57 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_median 5.57 ns 5.57 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_stddev 0.019 ns 0.019 ns 10 +std::string_view e = "123456789012345678901234567890"; auto c{e};_cv 0.35 % 0.35 % 10 +ssa e = "123456789012345678901234567890"; auto c{e};_mean 3.32 ns 3.32 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_median 3.32 ns 3.32 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_stddev 0.021 ns 0.021 ns 10 +ssa e = "123456789012345678901234567890"; auto c{e};_cv 0.63 % 0.63 % 10 +stringa e = "123456789012345678901234567890"; auto c{e};_mean 4.89 ns 4.89 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_median 4.87 ns 4.87 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_stddev 0.063 ns 0.063 ns 10 +stringa e = "123456789012345678901234567890"; auto c{e};_cv 1.30 % 1.30 % 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_mean 66.3 ns 66.3 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_median 66.0 ns 66.1 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_stddev 2.64 ns 2.64 ns 10 +lstringa<20> e = "123456789012345678901234567890"; auto c{e};_cv 3.98 % 3.98 % 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_mean 17.0 ns 17.0 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_median 16.7 ns 16.7 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_stddev 0.960 ns 0.960 ns 10 +lstringa<40> e = "123456789012345678901234567890"; auto c{e};_cv 5.66 % 5.66 % 10 +----- Find 9 symbols text in end of 99 symbols text ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find;_mean 101 ns 101 ns 10 +std::string::find;_median 101 ns 101 ns 10 +std::string::find;_stddev 1.61 ns 1.61 ns 10 +std::string::find;_cv 1.59 % 1.59 % 10 +std::string_view::find;_mean 103 ns 103 ns 10 +std::string_view::find;_median 102 ns 102 ns 10 +std::string_view::find;_stddev 4.97 ns 4.97 ns 10 +std::string_view::find;_cv 4.83 % 4.83 % 10 +ssa::find;_mean 102 ns 102 ns 10 ssa::find;_median 102 ns 102 ns 10 -ssa::find;_stddev 4.82 ns 4.82 ns 10 -ssa::find;_cv 4.75 % 4.75 % 10 -stringa::find;_mean 102 ns 102 ns 10 -stringa::find;_median 101 ns 101 ns 10 -stringa::find;_stddev 2.09 ns 2.09 ns 10 -stringa::find;_cv 2.06 % 2.06 % 10 -lstringa<20>::find;_mean 100 ns 100 ns 10 -lstringa<20>::find;_median 100 ns 100 ns 10 -lstringa<20>::find;_stddev 2.47 ns 2.47 ns 10 -lstringa<20>::find;_cv 2.46 % 2.46 % 10 -lstringa<40>::find;_mean 102 ns 102 ns 10 -lstringa<40>::find;_median 102 ns 102 ns 10 -lstringa<40>::find;_stddev 2.47 ns 2.47 ns 10 -lstringa<40>::find;_cv 2.42 % 2.42 % 10 -------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string copy{str_with_len_N};/15_mean 117 ns 117 ns 10 -std::string copy{str_with_len_N};/15_median 118 ns 118 ns 10 -std::string copy{str_with_len_N};/15_stddev 2.87 ns 2.87 ns 10 -std::string copy{str_with_len_N};/15_cv 2.45 % 2.45 % 10 -std::string copy{str_with_len_N};/16_mean 120 ns 120 ns 10 -std::string copy{str_with_len_N};/16_median 119 ns 119 ns 10 -std::string copy{str_with_len_N};/16_stddev 4.25 ns 4.25 ns 10 -std::string copy{str_with_len_N};/16_cv 3.54 % 3.54 % 10 -std::string copy{str_with_len_N};/23_mean 119 ns 119 ns 10 -std::string copy{str_with_len_N};/23_median 119 ns 119 ns 10 -std::string copy{str_with_len_N};/23_stddev 4.81 ns 4.81 ns 10 -std::string copy{str_with_len_N};/23_cv 4.03 % 4.03 % 10 -std::string copy{str_with_len_N};/24_mean 120 ns 120 ns 10 -std::string copy{str_with_len_N};/24_median 117 ns 117 ns 10 -std::string copy{str_with_len_N};/24_stddev 6.96 ns 6.96 ns 10 -std::string copy{str_with_len_N};/24_cv 5.78 % 5.78 % 10 -std::string copy{str_with_len_N};/32_mean 124 ns 124 ns 10 -std::string copy{str_with_len_N};/32_median 125 ns 125 ns 10 -std::string copy{str_with_len_N};/32_stddev 4.17 ns 4.17 ns 10 -std::string copy{str_with_len_N};/32_cv 3.37 % 3.37 % 10 -std::string copy{str_with_len_N};/64_mean 125 ns 125 ns 10 -std::string copy{str_with_len_N};/64_median 125 ns 125 ns 10 -std::string copy{str_with_len_N};/64_stddev 5.21 ns 5.21 ns 10 -std::string copy{str_with_len_N};/64_cv 4.16 % 4.16 % 10 -std::string copy{str_with_len_N};/128_mean 122 ns 122 ns 10 -std::string copy{str_with_len_N};/128_median 121 ns 121 ns 10 -std::string copy{str_with_len_N};/128_stddev 5.21 ns 5.21 ns 10 -std::string copy{str_with_len_N};/128_cv 4.27 % 4.27 % 10 -std::string copy{str_with_len_N};/256_mean 146 ns 146 ns 10 -std::string copy{str_with_len_N};/256_median 152 ns 152 ns 10 -std::string copy{str_with_len_N};/256_stddev 17.4 ns 17.4 ns 10 -std::string copy{str_with_len_N};/256_cv 11.94 % 11.94 % 10 -std::string copy{str_with_len_N};/512_mean 163 ns 163 ns 10 -std::string copy{str_with_len_N};/512_median 168 ns 168 ns 10 -std::string copy{str_with_len_N};/512_stddev 37.9 ns 37.9 ns 10 -std::string copy{str_with_len_N};/512_cv 23.21 % 23.21 % 10 -std::string copy{str_with_len_N};/1024_mean 148 ns 148 ns 10 -std::string copy{str_with_len_N};/1024_median 142 ns 142 ns 10 -std::string copy{str_with_len_N};/1024_stddev 23.5 ns 23.5 ns 10 -std::string copy{str_with_len_N};/1024_cv 15.86 % 15.86 % 10 -std::string copy{str_with_len_N};/2048_mean 165 ns 165 ns 10 -std::string copy{str_with_len_N};/2048_median 165 ns 165 ns 10 -std::string copy{str_with_len_N};/2048_stddev 8.09 ns 8.09 ns 10 -std::string copy{str_with_len_N};/2048_cv 4.92 % 4.92 % 10 -std::string copy{str_with_len_N};/4096_mean 204 ns 204 ns 10 -std::string copy{str_with_len_N};/4096_median 203 ns 203 ns 10 -std::string copy{str_with_len_N};/4096_stddev 9.70 ns 9.70 ns 10 -std::string copy{str_with_len_N};/4096_cv 4.76 % 4.76 % 10 -stringa copy{str_with_len_N};/15_mean 4.84 ns 4.84 ns 10 -stringa copy{str_with_len_N};/15_median 4.80 ns 4.80 ns 10 -stringa copy{str_with_len_N};/15_stddev 0.112 ns 0.112 ns 10 -stringa copy{str_with_len_N};/15_cv 2.31 % 2.31 % 10 -stringa copy{str_with_len_N};/16_mean 10.3 ns 10.3 ns 10 -stringa copy{str_with_len_N};/16_median 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/16_stddev 0.343 ns 0.343 ns 10 -stringa copy{str_with_len_N};/16_cv 3.35 % 3.35 % 10 -stringa copy{str_with_len_N};/23_mean 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/23_median 10.2 ns 10.2 ns 10 -stringa copy{str_with_len_N};/23_stddev 0.210 ns 0.210 ns 10 -stringa copy{str_with_len_N};/23_cv 2.07 % 2.07 % 10 -stringa copy{str_with_len_N};/24_mean 10.2 ns 10.2 ns 10 -stringa copy{str_with_len_N};/24_median 10.2 ns 10.2 ns 10 -stringa copy{str_with_len_N};/24_stddev 0.244 ns 0.244 ns 10 -stringa copy{str_with_len_N};/24_cv 2.40 % 2.40 % 10 -stringa copy{str_with_len_N};/32_mean 10.2 ns 10.2 ns 10 -stringa copy{str_with_len_N};/32_median 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/32_stddev 0.203 ns 0.204 ns 10 -stringa copy{str_with_len_N};/32_cv 2.00 % 2.00 % 10 -stringa copy{str_with_len_N};/64_mean 10.0 ns 10.0 ns 10 -stringa copy{str_with_len_N};/64_median 10.0 ns 10.0 ns 10 -stringa copy{str_with_len_N};/64_stddev 0.134 ns 0.134 ns 10 -stringa copy{str_with_len_N};/64_cv 1.34 % 1.34 % 10 -stringa copy{str_with_len_N};/128_mean 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/128_median 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/128_stddev 0.171 ns 0.171 ns 10 -stringa copy{str_with_len_N};/128_cv 1.70 % 1.71 % 10 -stringa copy{str_with_len_N};/256_mean 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/256_median 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/256_stddev 0.138 ns 0.138 ns 10 -stringa copy{str_with_len_N};/256_cv 1.37 % 1.37 % 10 -stringa copy{str_with_len_N};/512_mean 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/512_median 10.0 ns 10.0 ns 10 -stringa copy{str_with_len_N};/512_stddev 0.187 ns 0.187 ns 10 -stringa copy{str_with_len_N};/512_cv 1.85 % 1.85 % 10 -stringa copy{str_with_len_N};/1024_mean 10.0 ns 10.0 ns 10 -stringa copy{str_with_len_N};/1024_median 9.97 ns 9.97 ns 10 -stringa copy{str_with_len_N};/1024_stddev 0.168 ns 0.168 ns 10 -stringa copy{str_with_len_N};/1024_cv 1.68 % 1.68 % 10 +ssa::find;_stddev 2.15 ns 2.15 ns 10 +ssa::find;_cv 2.11 % 2.11 % 10 +stringa::find;_mean 105 ns 105 ns 10 +stringa::find;_median 104 ns 104 ns 10 +stringa::find;_stddev 4.34 ns 4.34 ns 10 +stringa::find;_cv 4.15 % 4.15 % 10 +lstringa<20>::find;_mean 99.9 ns 99.9 ns 10 +lstringa<20>::find;_median 99.9 ns 99.9 ns 10 +lstringa<20>::find;_stddev 1.61 ns 1.61 ns 10 +lstringa<20>::find;_cv 1.61 % 1.61 % 10 +lstringa<40>::find;_mean 100 ns 100 ns 10 +lstringa<40>::find;_median 99.2 ns 99.2 ns 10 +lstringa<40>::find;_stddev 3.67 ns 3.67 ns 10 +lstringa<40>::find;_cv 3.66 % 3.66 % 10 +------- Copy not literal Str with N symbols ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string copy{str_with_len_N};/15_mean 97.2 ns 97.2 ns 10 +std::string copy{str_with_len_N};/15_median 98.2 ns 98.2 ns 10 +std::string copy{str_with_len_N};/15_stddev 5.39 ns 5.39 ns 10 +std::string copy{str_with_len_N};/15_cv 5.55 % 5.55 % 10 +std::string copy{str_with_len_N};/16_mean 94.6 ns 94.6 ns 10 +std::string copy{str_with_len_N};/16_median 95.7 ns 95.7 ns 10 +std::string copy{str_with_len_N};/16_stddev 3.09 ns 3.09 ns 10 +std::string copy{str_with_len_N};/16_cv 3.27 % 3.27 % 10 +std::string copy{str_with_len_N};/23_mean 91.6 ns 91.6 ns 10 +std::string copy{str_with_len_N};/23_median 91.7 ns 91.7 ns 10 +std::string copy{str_with_len_N};/23_stddev 3.83 ns 3.83 ns 10 +std::string copy{str_with_len_N};/23_cv 4.18 % 4.18 % 10 +std::string copy{str_with_len_N};/24_mean 94.5 ns 94.5 ns 10 +std::string copy{str_with_len_N};/24_median 94.9 ns 94.9 ns 10 +std::string copy{str_with_len_N};/24_stddev 3.26 ns 3.26 ns 10 +std::string copy{str_with_len_N};/24_cv 3.45 % 3.45 % 10 +std::string copy{str_with_len_N};/32_mean 97.0 ns 97.0 ns 10 +std::string copy{str_with_len_N};/32_median 97.4 ns 97.4 ns 10 +std::string copy{str_with_len_N};/32_stddev 3.12 ns 3.12 ns 10 +std::string copy{str_with_len_N};/32_cv 3.22 % 3.22 % 10 +std::string copy{str_with_len_N};/64_mean 98.1 ns 98.1 ns 10 +std::string copy{str_with_len_N};/64_median 97.6 ns 97.6 ns 10 +std::string copy{str_with_len_N};/64_stddev 4.22 ns 4.22 ns 10 +std::string copy{str_with_len_N};/64_cv 4.30 % 4.30 % 10 +std::string copy{str_with_len_N};/128_mean 103 ns 103 ns 10 +std::string copy{str_with_len_N};/128_median 100 ns 100 ns 10 +std::string copy{str_with_len_N};/128_stddev 9.59 ns 9.59 ns 10 +std::string copy{str_with_len_N};/128_cv 9.29 % 9.29 % 10 +std::string copy{str_with_len_N};/256_mean 161 ns 161 ns 10 +std::string copy{str_with_len_N};/256_median 180 ns 180 ns 10 +std::string copy{str_with_len_N};/256_stddev 40.6 ns 40.6 ns 10 +std::string copy{str_with_len_N};/256_cv 25.29 % 25.29 % 10 +std::string copy{str_with_len_N};/512_mean 151 ns 151 ns 10 +std::string copy{str_with_len_N};/512_median 150 ns 150 ns 10 +std::string copy{str_with_len_N};/512_stddev 38.1 ns 38.1 ns 10 +std::string copy{str_with_len_N};/512_cv 25.27 % 25.27 % 10 +std::string copy{str_with_len_N};/1024_mean 131 ns 131 ns 10 +std::string copy{str_with_len_N};/1024_median 126 ns 126 ns 10 +std::string copy{str_with_len_N};/1024_stddev 21.4 ns 21.4 ns 10 +std::string copy{str_with_len_N};/1024_cv 16.31 % 16.31 % 10 +std::string copy{str_with_len_N};/2048_mean 148 ns 148 ns 10 +std::string copy{str_with_len_N};/2048_median 145 ns 145 ns 10 +std::string copy{str_with_len_N};/2048_stddev 10.5 ns 10.5 ns 10 +std::string copy{str_with_len_N};/2048_cv 7.09 % 7.09 % 10 +std::string copy{str_with_len_N};/4096_mean 185 ns 185 ns 10 +std::string copy{str_with_len_N};/4096_median 183 ns 183 ns 10 +std::string copy{str_with_len_N};/4096_stddev 8.27 ns 8.27 ns 10 +std::string copy{str_with_len_N};/4096_cv 4.47 % 4.47 % 10 +stringa copy{str_with_len_N};/15_mean 5.19 ns 5.19 ns 10 +stringa copy{str_with_len_N};/15_median 5.13 ns 5.13 ns 10 +stringa copy{str_with_len_N};/15_stddev 0.223 ns 0.223 ns 10 +stringa copy{str_with_len_N};/15_cv 4.29 % 4.29 % 10 +stringa copy{str_with_len_N};/16_mean 10.0 ns 10.0 ns 10 +stringa copy{str_with_len_N};/16_median 9.95 ns 9.95 ns 10 +stringa copy{str_with_len_N};/16_stddev 0.218 ns 0.218 ns 10 +stringa copy{str_with_len_N};/16_cv 2.17 % 2.17 % 10 +stringa copy{str_with_len_N};/23_mean 9.97 ns 9.97 ns 10 +stringa copy{str_with_len_N};/23_median 9.91 ns 9.91 ns 10 +stringa copy{str_with_len_N};/23_stddev 0.223 ns 0.223 ns 10 +stringa copy{str_with_len_N};/23_cv 2.23 % 2.23 % 10 +stringa copy{str_with_len_N};/24_mean 10.1 ns 10.1 ns 10 +stringa copy{str_with_len_N};/24_median 9.98 ns 9.98 ns 10 +stringa copy{str_with_len_N};/24_stddev 0.238 ns 0.238 ns 10 +stringa copy{str_with_len_N};/24_cv 2.36 % 2.36 % 10 +stringa copy{str_with_len_N};/32_mean 10.0 ns 10.0 ns 10 +stringa copy{str_with_len_N};/32_median 10.0 ns 10.0 ns 10 +stringa copy{str_with_len_N};/32_stddev 0.122 ns 0.122 ns 10 +stringa copy{str_with_len_N};/32_cv 1.21 % 1.21 % 10 +stringa copy{str_with_len_N};/64_mean 9.95 ns 9.95 ns 10 +stringa copy{str_with_len_N};/64_median 9.90 ns 9.90 ns 10 +stringa copy{str_with_len_N};/64_stddev 0.145 ns 0.145 ns 10 +stringa copy{str_with_len_N};/64_cv 1.46 % 1.46 % 10 +stringa copy{str_with_len_N};/128_mean 9.93 ns 9.93 ns 10 +stringa copy{str_with_len_N};/128_median 9.90 ns 9.90 ns 10 +stringa copy{str_with_len_N};/128_stddev 0.178 ns 0.178 ns 10 +stringa copy{str_with_len_N};/128_cv 1.79 % 1.79 % 10 +stringa copy{str_with_len_N};/256_mean 9.95 ns 9.95 ns 10 +stringa copy{str_with_len_N};/256_median 9.92 ns 9.92 ns 10 +stringa copy{str_with_len_N};/256_stddev 0.112 ns 0.112 ns 10 +stringa copy{str_with_len_N};/256_cv 1.13 % 1.13 % 10 +stringa copy{str_with_len_N};/512_mean 10.0 ns 10.0 ns 10 +stringa copy{str_with_len_N};/512_median 9.94 ns 9.94 ns 10 +stringa copy{str_with_len_N};/512_stddev 0.214 ns 0.214 ns 10 +stringa copy{str_with_len_N};/512_cv 2.13 % 2.13 % 10 +stringa copy{str_with_len_N};/1024_mean 9.92 ns 9.92 ns 10 +stringa copy{str_with_len_N};/1024_median 9.90 ns 9.90 ns 10 +stringa copy{str_with_len_N};/1024_stddev 0.113 ns 0.113 ns 10 +stringa copy{str_with_len_N};/1024_cv 1.14 % 1.14 % 10 stringa copy{str_with_len_N};/2048_mean 10.0 ns 10.0 ns 10 -stringa copy{str_with_len_N};/2048_median 10.0 ns 10.0 ns 10 -stringa copy{str_with_len_N};/2048_stddev 0.121 ns 0.121 ns 10 -stringa copy{str_with_len_N};/2048_cv 1.21 % 1.21 % 10 +stringa copy{str_with_len_N};/2048_median 9.97 ns 9.97 ns 10 +stringa copy{str_with_len_N};/2048_stddev 0.174 ns 0.174 ns 10 +stringa copy{str_with_len_N};/2048_cv 1.73 % 1.73 % 10 stringa copy{str_with_len_N};/4096_mean 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/4096_median 10.1 ns 10.1 ns 10 -stringa copy{str_with_len_N};/4096_stddev 0.091 ns 0.091 ns 10 -stringa copy{str_with_len_N};/4096_cv 0.90 % 0.90 % 10 -lstringa<16> copy{str_with_len_N};/15_mean 15.7 ns 15.7 ns 10 -lstringa<16> copy{str_with_len_N};/15_median 15.8 ns 15.8 ns 10 -lstringa<16> copy{str_with_len_N};/15_stddev 0.435 ns 0.435 ns 10 -lstringa<16> copy{str_with_len_N};/15_cv 2.78 % 2.78 % 10 -lstringa<16> copy{str_with_len_N};/16_mean 16.1 ns 16.1 ns 10 -lstringa<16> copy{str_with_len_N};/16_median 16.1 ns 16.1 ns 10 -lstringa<16> copy{str_with_len_N};/16_stddev 0.768 ns 0.768 ns 10 -lstringa<16> copy{str_with_len_N};/16_cv 4.76 % 4.76 % 10 -lstringa<16> copy{str_with_len_N};/23_mean 75.4 ns 75.4 ns 10 -lstringa<16> copy{str_with_len_N};/23_median 75.3 ns 75.3 ns 10 -lstringa<16> copy{str_with_len_N};/23_stddev 3.08 ns 3.08 ns 10 -lstringa<16> copy{str_with_len_N};/23_cv 4.08 % 4.08 % 10 -lstringa<16> copy{str_with_len_N};/24_mean 76.2 ns 76.2 ns 10 -lstringa<16> copy{str_with_len_N};/24_median 75.6 ns 75.6 ns 10 -lstringa<16> copy{str_with_len_N};/24_stddev 4.31 ns 4.31 ns 10 -lstringa<16> copy{str_with_len_N};/24_cv 5.66 % 5.66 % 10 -lstringa<16> copy{str_with_len_N};/32_mean 82.1 ns 82.1 ns 10 -lstringa<16> copy{str_with_len_N};/32_median 82.8 ns 82.8 ns 10 -lstringa<16> copy{str_with_len_N};/32_stddev 5.50 ns 5.50 ns 10 -lstringa<16> copy{str_with_len_N};/32_cv 6.70 % 6.70 % 10 -lstringa<16> copy{str_with_len_N};/64_mean 78.1 ns 78.1 ns 10 -lstringa<16> copy{str_with_len_N};/64_median 78.0 ns 78.0 ns 10 -lstringa<16> copy{str_with_len_N};/64_stddev 2.56 ns 2.56 ns 10 -lstringa<16> copy{str_with_len_N};/64_cv 3.27 % 3.27 % 10 -lstringa<16> copy{str_with_len_N};/128_mean 79.2 ns 79.2 ns 10 -lstringa<16> copy{str_with_len_N};/128_median 77.8 ns 77.8 ns 10 -lstringa<16> copy{str_with_len_N};/128_stddev 3.51 ns 3.51 ns 10 -lstringa<16> copy{str_with_len_N};/128_cv 4.44 % 4.44 % 10 -lstringa<16> copy{str_with_len_N};/256_mean 103 ns 103 ns 10 -lstringa<16> copy{str_with_len_N};/256_median 110 ns 110 ns 10 -lstringa<16> copy{str_with_len_N};/256_stddev 16.2 ns 16.2 ns 10 -lstringa<16> copy{str_with_len_N};/256_cv 15.73 % 15.73 % 10 -lstringa<16> copy{str_with_len_N};/512_mean 121 ns 121 ns 10 -lstringa<16> copy{str_with_len_N};/512_median 120 ns 120 ns 10 -lstringa<16> copy{str_with_len_N};/512_stddev 39.3 ns 39.3 ns 10 -lstringa<16> copy{str_with_len_N};/512_cv 32.53 % 32.53 % 10 -lstringa<16> copy{str_with_len_N};/1024_mean 107 ns 107 ns 10 -lstringa<16> copy{str_with_len_N};/1024_median 103 ns 103 ns 10 -lstringa<16> copy{str_with_len_N};/1024_stddev 25.3 ns 25.3 ns 10 -lstringa<16> copy{str_with_len_N};/1024_cv 23.61 % 23.61 % 10 -lstringa<16> copy{str_with_len_N};/2048_mean 123 ns 123 ns 10 +stringa copy{str_with_len_N};/4096_median 9.99 ns 9.99 ns 10 +stringa copy{str_with_len_N};/4096_stddev 0.212 ns 0.212 ns 10 +stringa copy{str_with_len_N};/4096_cv 2.11 % 2.11 % 10 +lstringa<16> copy{str_with_len_N};/15_mean 17.2 ns 17.2 ns 10 +lstringa<16> copy{str_with_len_N};/15_median 17.0 ns 17.0 ns 10 +lstringa<16> copy{str_with_len_N};/15_stddev 1.43 ns 1.43 ns 10 +lstringa<16> copy{str_with_len_N};/15_cv 8.29 % 8.29 % 10 +lstringa<16> copy{str_with_len_N};/16_mean 17.0 ns 17.0 ns 10 +lstringa<16> copy{str_with_len_N};/16_median 17.0 ns 17.0 ns 10 +lstringa<16> copy{str_with_len_N};/16_stddev 0.735 ns 0.735 ns 10 +lstringa<16> copy{str_with_len_N};/16_cv 4.33 % 4.33 % 10 +lstringa<16> copy{str_with_len_N};/23_mean 77.8 ns 77.8 ns 10 +lstringa<16> copy{str_with_len_N};/23_median 77.4 ns 77.4 ns 10 +lstringa<16> copy{str_with_len_N};/23_stddev 2.84 ns 2.84 ns 10 +lstringa<16> copy{str_with_len_N};/23_cv 3.65 % 3.65 % 10 +lstringa<16> copy{str_with_len_N};/24_mean 76.5 ns 76.5 ns 10 +lstringa<16> copy{str_with_len_N};/24_median 76.1 ns 76.1 ns 10 +lstringa<16> copy{str_with_len_N};/24_stddev 1.45 ns 1.45 ns 10 +lstringa<16> copy{str_with_len_N};/24_cv 1.90 % 1.90 % 10 +lstringa<16> copy{str_with_len_N};/32_mean 79.5 ns 79.5 ns 10 +lstringa<16> copy{str_with_len_N};/32_median 80.2 ns 80.2 ns 10 +lstringa<16> copy{str_with_len_N};/32_stddev 3.63 ns 3.63 ns 10 +lstringa<16> copy{str_with_len_N};/32_cv 4.57 % 4.57 % 10 +lstringa<16> copy{str_with_len_N};/64_mean 82.9 ns 82.9 ns 10 +lstringa<16> copy{str_with_len_N};/64_median 81.8 ns 81.8 ns 10 +lstringa<16> copy{str_with_len_N};/64_stddev 7.03 ns 7.03 ns 10 +lstringa<16> copy{str_with_len_N};/64_cv 8.48 % 8.48 % 10 +lstringa<16> copy{str_with_len_N};/128_mean 83.0 ns 83.0 ns 10 +lstringa<16> copy{str_with_len_N};/128_median 82.3 ns 82.3 ns 10 +lstringa<16> copy{str_with_len_N};/128_stddev 5.89 ns 5.89 ns 10 +lstringa<16> copy{str_with_len_N};/128_cv 7.10 % 7.10 % 10 +lstringa<16> copy{str_with_len_N};/256_mean 133 ns 133 ns 10 +lstringa<16> copy{str_with_len_N};/256_median 152 ns 152 ns 10 +lstringa<16> copy{str_with_len_N};/256_stddev 34.9 ns 34.9 ns 10 +lstringa<16> copy{str_with_len_N};/256_cv 26.21 % 26.21 % 10 +lstringa<16> copy{str_with_len_N};/512_mean 130 ns 130 ns 10 +lstringa<16> copy{str_with_len_N};/512_median 131 ns 131 ns 10 +lstringa<16> copy{str_with_len_N};/512_stddev 38.4 ns 38.4 ns 10 +lstringa<16> copy{str_with_len_N};/512_cv 29.57 % 29.57 % 10 +lstringa<16> copy{str_with_len_N};/1024_mean 111 ns 111 ns 10 +lstringa<16> copy{str_with_len_N};/1024_median 102 ns 102 ns 10 +lstringa<16> copy{str_with_len_N};/1024_stddev 19.9 ns 19.9 ns 10 +lstringa<16> copy{str_with_len_N};/1024_cv 17.84 % 17.84 % 10 +lstringa<16> copy{str_with_len_N};/2048_mean 122 ns 122 ns 10 lstringa<16> copy{str_with_len_N};/2048_median 122 ns 122 ns 10 -lstringa<16> copy{str_with_len_N};/2048_stddev 7.32 ns 7.32 ns 10 -lstringa<16> copy{str_with_len_N};/2048_cv 5.96 % 5.96 % 10 -lstringa<16> copy{str_with_len_N};/4096_mean 160 ns 160 ns 10 -lstringa<16> copy{str_with_len_N};/4096_median 161 ns 161 ns 10 -lstringa<16> copy{str_with_len_N};/4096_stddev 13.4 ns 13.4 ns 10 -lstringa<16> copy{str_with_len_N};/4096_cv 8.38 % 8.38 % 10 -lstringa<512> copy{str_with_len_N};/15_mean 15.3 ns 15.3 ns 10 -lstringa<512> copy{str_with_len_N};/15_median 15.2 ns 15.2 ns 10 -lstringa<512> copy{str_with_len_N};/15_stddev 0.277 ns 0.277 ns 10 -lstringa<512> copy{str_with_len_N};/15_cv 1.82 % 1.82 % 10 -lstringa<512> copy{str_with_len_N};/16_mean 15.1 ns 15.1 ns 10 -lstringa<512> copy{str_with_len_N};/16_median 15.2 ns 15.2 ns 10 -lstringa<512> copy{str_with_len_N};/16_stddev 0.358 ns 0.358 ns 10 -lstringa<512> copy{str_with_len_N};/16_cv 2.37 % 2.37 % 10 -lstringa<512> copy{str_with_len_N};/23_mean 15.6 ns 15.6 ns 10 -lstringa<512> copy{str_with_len_N};/23_median 15.6 ns 15.6 ns 10 -lstringa<512> copy{str_with_len_N};/23_stddev 0.607 ns 0.607 ns 10 -lstringa<512> copy{str_with_len_N};/23_cv 3.89 % 3.89 % 10 -lstringa<512> copy{str_with_len_N};/24_mean 15.3 ns 15.3 ns 10 -lstringa<512> copy{str_with_len_N};/24_median 15.3 ns 15.3 ns 10 -lstringa<512> copy{str_with_len_N};/24_stddev 0.619 ns 0.619 ns 10 -lstringa<512> copy{str_with_len_N};/24_cv 4.05 % 4.05 % 10 -lstringa<512> copy{str_with_len_N};/32_mean 17.2 ns 17.2 ns 10 -lstringa<512> copy{str_with_len_N};/32_median 17.1 ns 17.1 ns 10 -lstringa<512> copy{str_with_len_N};/32_stddev 0.672 ns 0.672 ns 10 -lstringa<512> copy{str_with_len_N};/32_cv 3.90 % 3.90 % 10 -lstringa<512> copy{str_with_len_N};/64_mean 18.3 ns 18.3 ns 10 -lstringa<512> copy{str_with_len_N};/64_median 18.1 ns 18.1 ns 10 -lstringa<512> copy{str_with_len_N};/64_stddev 0.938 ns 0.938 ns 10 -lstringa<512> copy{str_with_len_N};/64_cv 5.14 % 5.14 % 10 -lstringa<512> copy{str_with_len_N};/128_mean 19.1 ns 19.1 ns 10 -lstringa<512> copy{str_with_len_N};/128_median 19.1 ns 19.1 ns 10 -lstringa<512> copy{str_with_len_N};/128_stddev 0.733 ns 0.733 ns 10 -lstringa<512> copy{str_with_len_N};/128_cv 3.84 % 3.84 % 10 -lstringa<512> copy{str_with_len_N};/256_mean 32.3 ns 32.3 ns 10 -lstringa<512> copy{str_with_len_N};/256_median 32.3 ns 32.3 ns 10 -lstringa<512> copy{str_with_len_N};/256_stddev 0.534 ns 0.534 ns 10 -lstringa<512> copy{str_with_len_N};/256_cv 1.65 % 1.65 % 10 -lstringa<512> copy{str_with_len_N};/512_mean 33.8 ns 33.8 ns 10 -lstringa<512> copy{str_with_len_N};/512_median 33.7 ns 33.7 ns 10 -lstringa<512> copy{str_with_len_N};/512_stddev 0.661 ns 0.661 ns 10 -lstringa<512> copy{str_with_len_N};/512_cv 1.95 % 1.95 % 10 -lstringa<512> copy{str_with_len_N};/1024_mean 106 ns 106 ns 10 -lstringa<512> copy{str_with_len_N};/1024_median 101 ns 101 ns 10 -lstringa<512> copy{str_with_len_N};/1024_stddev 26.1 ns 26.1 ns 10 -lstringa<512> copy{str_with_len_N};/1024_cv 24.65 % 24.65 % 10 -lstringa<512> copy{str_with_len_N};/2048_mean 119 ns 119 ns 10 -lstringa<512> copy{str_with_len_N};/2048_median 119 ns 119 ns 10 -lstringa<512> copy{str_with_len_N};/2048_stddev 6.93 ns 6.93 ns 10 -lstringa<512> copy{str_with_len_N};/2048_cv 5.81 % 5.81 % 10 -lstringa<512> copy{str_with_len_N};/4096_mean 162 ns 162 ns 10 -lstringa<512> copy{str_with_len_N};/4096_median 163 ns 163 ns 10 -lstringa<512> copy{str_with_len_N};/4096_stddev 10.0 ns 10.0 ns 10 -lstringa<512> copy{str_with_len_N};/4096_cv 6.19 % 6.19 % 10 ------ Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 205 ns 205 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 206 ns 206 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 6.93 ns 6.93 ns 10 -std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 3.39 % 3.39 % 10 -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10); ERROR OCCURRED: 'not implemented' -stringa s = "123456789"; int res = s.to_int_mean 55.2 ns 55.2 ns 10 -stringa s = "123456789"; int res = s.to_int_median 54.5 ns 54.5 ns 10 -stringa s = "123456789"; int res = s.to_int_stddev 1.79 ns 1.79 ns 10 -stringa s = "123456789"; int res = s.to_int_cv 3.25 % 3.25 % 10 -ssa s = "123456789"; int res = s.to_int_mean 51.0 ns 51.0 ns 10 -ssa s = "123456789"; int res = s.to_int_median 51.1 ns 51.1 ns 10 -ssa s = "123456789"; int res = s.to_int_stddev 1.67 ns 1.67 ns 10 -ssa s = "123456789"; int res = s.to_int_cv 3.27 % 3.27 % 10 -lstringa<20> s = "123456789"; int res = s.to_int_mean 52.1 ns 52.1 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_median 51.3 ns 51.3 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_stddev 1.94 ns 1.94 ns 10 -lstringa<20> s = "123456789"; int res = s.to_int_cv 3.73 % 3.73 % 10 ------ Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 149 ns 149 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 149 ns 149 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 3.19 ns 3.19 ns 10 -std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 2.14 % 2.14 % 10 -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16); ERROR OCCURRED: 'not implemented' -stringa s = "abcDef"; int res = s.to_int_mean 51.8 ns 51.8 ns 10 -stringa s = "abcDef"; int res = s.to_int_median 51.5 ns 51.5 ns 10 -stringa s = "abcDef"; int res = s.to_int_stddev 0.900 ns 0.900 ns 10 -stringa s = "abcDef"; int res = s.to_int_cv 1.74 % 1.74 % 10 -ssa s = "abcDef"; int res = s.to_int_mean 50.0 ns 50.0 ns 10 -ssa s = "abcDef"; int res = s.to_int_median 50.1 ns 50.1 ns 10 -ssa s = "abcDef"; int res = s.to_int_stddev 0.773 ns 0.773 ns 10 -ssa s = "abcDef"; int res = s.to_int_cv 1.55 % 1.55 % 10 -lstringa<20> s = "abcDef"; int res = s.to_int_mean 51.4 ns 51.4 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_median 50.8 ns 50.8 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_stddev 1.46 ns 1.46 ns 10 -lstringa<20> s = "abcDef"; int res = s.to_int_cv 2.84 % 2.84 % 10 ------ Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 216 ns 216 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 215 ns 215 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 9.26 ns 9.26 ns 10 -std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 4.28 % 4.28 % 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 74.8 ns 74.8 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 75.4 ns 75.4 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 2.69 ns 2.69 ns 10 -stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 3.60 % 3.60 % 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 51.3 ns 51.3 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 51.3 ns 51.3 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.921 ns 0.921 ns 10 -ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 1.79 % 1.79 % 10 --- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << "abbaabbaabbaabba";_mean 11603 ns 11603 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_median 11482 ns 11482 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 292 ns 292 ns 10 -std::stringstream str; ... str << "abbaabbaabbaabba";_cv 2.51 % 2.51 % 10 -std::string str; ... str += "abbaabbaabbaabba";_mean 1138 ns 1138 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_median 1122 ns 1122 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_stddev 58.6 ns 58.6 ns 10 -std::string str; ... str += "abbaabbaabbaabba";_cv 5.15 % 5.15 % 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 1204 ns 1204 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_median 1191 ns 1191 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 54.3 ns 54.3 ns 10 -lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 4.51 % 4.51 % 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 873 ns 873 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_median 871 ns 871 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 60.7 ns 60.7 ns 10 -lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 6.95 % 6.95 % 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 640 ns 640 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_median 638 ns 638 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 38.9 ns 38.9 ns 10 -lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 6.08 % 6.08 % 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 498 ns 498 ns 10 +lstringa<16> copy{str_with_len_N};/2048_stddev 4.77 ns 4.77 ns 10 +lstringa<16> copy{str_with_len_N};/2048_cv 3.91 % 3.91 % 10 +lstringa<16> copy{str_with_len_N};/4096_mean 167 ns 167 ns 10 +lstringa<16> copy{str_with_len_N};/4096_median 167 ns 167 ns 10 +lstringa<16> copy{str_with_len_N};/4096_stddev 2.97 ns 2.97 ns 10 +lstringa<16> copy{str_with_len_N};/4096_cv 1.77 % 1.77 % 10 +lstringa<512> copy{str_with_len_N};/15_mean 17.9 ns 17.9 ns 10 +lstringa<512> copy{str_with_len_N};/15_median 17.8 ns 17.8 ns 10 +lstringa<512> copy{str_with_len_N};/15_stddev 0.742 ns 0.742 ns 10 +lstringa<512> copy{str_with_len_N};/15_cv 4.16 % 4.16 % 10 +lstringa<512> copy{str_with_len_N};/16_mean 18.5 ns 18.5 ns 10 +lstringa<512> copy{str_with_len_N};/16_median 18.3 ns 18.3 ns 10 +lstringa<512> copy{str_with_len_N};/16_stddev 1.16 ns 1.16 ns 10 +lstringa<512> copy{str_with_len_N};/16_cv 6.28 % 6.28 % 10 +lstringa<512> copy{str_with_len_N};/23_mean 18.6 ns 18.6 ns 10 +lstringa<512> copy{str_with_len_N};/23_median 18.4 ns 18.4 ns 10 +lstringa<512> copy{str_with_len_N};/23_stddev 0.848 ns 0.848 ns 10 +lstringa<512> copy{str_with_len_N};/23_cv 4.56 % 4.56 % 10 +lstringa<512> copy{str_with_len_N};/24_mean 18.8 ns 18.8 ns 10 +lstringa<512> copy{str_with_len_N};/24_median 18.6 ns 18.6 ns 10 +lstringa<512> copy{str_with_len_N};/24_stddev 0.881 ns 0.881 ns 10 +lstringa<512> copy{str_with_len_N};/24_cv 4.68 % 4.68 % 10 +lstringa<512> copy{str_with_len_N};/32_mean 25.0 ns 25.0 ns 10 +lstringa<512> copy{str_with_len_N};/32_median 24.3 ns 24.3 ns 10 +lstringa<512> copy{str_with_len_N};/32_stddev 1.68 ns 1.68 ns 10 +lstringa<512> copy{str_with_len_N};/32_cv 6.71 % 6.71 % 10 +lstringa<512> copy{str_with_len_N};/64_mean 21.2 ns 21.2 ns 10 +lstringa<512> copy{str_with_len_N};/64_median 21.0 ns 21.0 ns 10 +lstringa<512> copy{str_with_len_N};/64_stddev 0.789 ns 0.789 ns 10 +lstringa<512> copy{str_with_len_N};/64_cv 3.72 % 3.72 % 10 +lstringa<512> copy{str_with_len_N};/128_mean 22.3 ns 22.3 ns 10 +lstringa<512> copy{str_with_len_N};/128_median 22.2 ns 22.2 ns 10 +lstringa<512> copy{str_with_len_N};/128_stddev 0.675 ns 0.675 ns 10 +lstringa<512> copy{str_with_len_N};/128_cv 3.02 % 3.02 % 10 +lstringa<512> copy{str_with_len_N};/256_mean 24.0 ns 24.0 ns 10 +lstringa<512> copy{str_with_len_N};/256_median 23.9 ns 23.9 ns 10 +lstringa<512> copy{str_with_len_N};/256_stddev 0.383 ns 0.383 ns 10 +lstringa<512> copy{str_with_len_N};/256_cv 1.60 % 1.60 % 10 +lstringa<512> copy{str_with_len_N};/512_mean 26.8 ns 26.8 ns 10 +lstringa<512> copy{str_with_len_N};/512_median 26.7 ns 26.7 ns 10 +lstringa<512> copy{str_with_len_N};/512_stddev 0.830 ns 0.830 ns 10 +lstringa<512> copy{str_with_len_N};/512_cv 3.09 % 3.09 % 10 +lstringa<512> copy{str_with_len_N};/1024_mean 113 ns 113 ns 10 +lstringa<512> copy{str_with_len_N};/1024_median 106 ns 106 ns 10 +lstringa<512> copy{str_with_len_N};/1024_stddev 26.0 ns 26.0 ns 10 +lstringa<512> copy{str_with_len_N};/1024_cv 23.08 % 23.08 % 10 +lstringa<512> copy{str_with_len_N};/2048_mean 129 ns 129 ns 10 +lstringa<512> copy{str_with_len_N};/2048_median 129 ns 129 ns 10 +lstringa<512> copy{str_with_len_N};/2048_stddev 5.50 ns 5.50 ns 10 +lstringa<512> copy{str_with_len_N};/2048_cv 4.26 % 4.26 % 10 +lstringa<512> copy{str_with_len_N};/4096_mean 169 ns 169 ns 10 +lstringa<512> copy{str_with_len_N};/4096_median 167 ns 167 ns 10 +lstringa<512> copy{str_with_len_N};/4096_stddev 5.95 ns 5.95 ns 10 +lstringa<512> copy{str_with_len_N};/4096_cv 3.51 % 3.51 % 10 +----- Convert to int '1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_mean 204 ns 204 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_median 203 ns 203 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_stddev 10.00 ns 10.00 ns 10 +std::string s = "123456789"; int res = std::strtol(s.c_str(), 0, 10);_cv 4.89 % 4.89 % 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_mean 65.9 ns 65.9 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_median 65.8 ns 65.8 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_stddev 0.675 ns 0.675 ns 10 +std::string_view s = "123456789"; std::from_chars(s.data(), s.data() + s.size(), res, 10);_cv 1.02 % 1.02 % 10 +stringa s = "123456789"; int res = s.to_int_mean 58.9 ns 58.9 ns 10 +stringa s = "123456789"; int res = s.to_int_median 57.5 ns 57.5 ns 10 +stringa s = "123456789"; int res = s.to_int_stddev 3.92 ns 3.92 ns 10 +stringa s = "123456789"; int res = s.to_int_cv 6.65 % 6.65 % 10 +ssa s = "123456789"; int res = s.to_int_mean 54.2 ns 54.2 ns 10 +ssa s = "123456789"; int res = s.to_int_median 54.0 ns 54.0 ns 10 +ssa s = "123456789"; int res = s.to_int_stddev 2.00 ns 2.00 ns 10 +ssa s = "123456789"; int res = s.to_int_cv 3.69 % 3.69 % 10 +lstringa<20> s = "123456789"; int res = s.to_int_mean 54.1 ns 54.1 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_median 53.9 ns 53.9 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_stddev 1.31 ns 1.31 ns 10 +lstringa<20> s = "123456789"; int res = s.to_int_cv 2.42 % 2.42 % 10 +----- Convert to unsigned 'abcDef' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_mean 158 ns 158 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_median 154 ns 154 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_stddev 7.54 ns 7.54 ns 10 +std::string s = "abcDef"; int res = std::strtol(s.c_str(), 0, 16);_cv 4.78 % 4.78 % 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_mean 85.4 ns 85.4 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_median 85.3 ns 85.3 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_stddev 1.31 ns 1.31 ns 10 +std::string_view s = "abcDef"; std::from_chars(s.data(), s.data() + s.size(), res, 16);_cv 1.53 % 1.53 % 10 +stringa s = "abcDef"; int res = s.to_int_mean 50.4 ns 50.4 ns 10 +stringa s = "abcDef"; int res = s.to_int_median 50.7 ns 50.7 ns 10 +stringa s = "abcDef"; int res = s.to_int_stddev 1.67 ns 1.67 ns 10 +stringa s = "abcDef"; int res = s.to_int_cv 3.32 % 3.32 % 10 +ssa s = "abcDef"; int res = s.to_int_mean 47.5 ns 47.5 ns 10 +ssa s = "abcDef"; int res = s.to_int_median 47.3 ns 47.3 ns 10 +ssa s = "abcDef"; int res = s.to_int_stddev 1.31 ns 1.31 ns 10 +ssa s = "abcDef"; int res = s.to_int_cv 2.76 % 2.76 % 10 +lstringa<20> s = "abcDef"; int res = s.to_int_mean 47.2 ns 47.2 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_median 46.5 ns 46.5 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_stddev 2.98 ns 2.98 ns 10 +lstringa<20> s = "abcDef"; int res = s.to_int_cv 6.32 % 6.32 % 10 +----- Convert to int ' 1234567' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_mean 226 ns 226 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_median 225 ns 225 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_stddev 13.9 ns 13.9 ns 10 +std::string s = " 123456789"; int res = std::strtol(s.c_str(), 0, 0);_cv 6.15 % 6.15 % 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_mean 80.3 ns 80.3 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_median 79.8 ns 79.8 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_stddev 2.73 ns 2.73 ns 10 +stringa s = " 123456789"; int res = s.to_int; // Check overflow_cv 3.40 % 3.40 % 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_mean 53.0 ns 53.0 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_median 52.8 ns 52.8 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_stddev 0.840 ns 0.840 ns 10 +ssa s = " 123456789"; int res = s.to_int; // No check overflow_cv 1.58 % 1.58 % 10 +----- Convert to double '1234.567e10' ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_mean 460 ns 460 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_median 454 ns 454 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_stddev 19.7 ns 19.7 ns 10 +std::string s = "1234.567e10"; double res = std::strtod(s.c_str(), nullptr);_cv 4.28 % 4.28 % 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_mean 294 ns 294 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_median 291 ns 291 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_stddev 6.63 ns 6.63 ns 10 +std::string_view s = "1234.567e10"; std::from_chars(s.data(), s.data() + s.size(), res);_cv 2.26 % 2.26 % 10 +ssa s = "1234.567e10"; double res = *s.to_double()_mean 105 ns 105 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_median 103 ns 103 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_stddev 6.39 ns 6.38 ns 10 +ssa s = "1234.567e10"; double res = *s.to_double()_cv 6.06 % 6.06 % 10 +-- Append const literal of 16 bytes 64 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << "abbaabbaabbaabba";_mean 11819 ns 11819 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_median 11691 ns 11691 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_stddev 494 ns 494 ns 10 +std::stringstream str; ... str << "abbaabbaabbaabba";_cv 4.18 % 4.18 % 10 +std::string str; ... str += "abbaabbaabbaabba";_mean 1174 ns 1174 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_median 1168 ns 1168 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_stddev 76.0 ns 76.0 ns 10 +std::string str; ... str += "abbaabbaabbaabba";_cv 6.48 % 6.47 % 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_mean 1294 ns 1294 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_median 1287 ns 1287 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_stddev 68.2 ns 68.2 ns 10 +lstringa<8> str; ... str += "abbaabbaabbaabba";_cv 5.27 % 5.27 % 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_mean 900 ns 900 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_median 912 ns 912 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_stddev 52.1 ns 52.1 ns 10 +lstringa<128> str; ... str += "abbaabbaabbaabba";_cv 5.79 % 5.79 % 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_mean 637 ns 637 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_median 631 ns 631 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_stddev 44.2 ns 44.2 ns 10 +lstringa<512> str; ... str += "abbaabbaabbaabba";_cv 6.94 % 6.94 % 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_mean 501 ns 501 ns 10 lstringa<1024> str; ... str += "abbaabbaabbaabba";_median 497 ns 497 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 9.13 ns 9.13 ns 10 -lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 1.83 % 1.83 % 10 --- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 11698 ns 11698 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 11738 ns 11738 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 210 ns 210 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 1.80 % 1.80 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 4015 ns 4015 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_median 4012 ns 4012 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 170 ns 170 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 4.23 % 4.23 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 1435 ns 1435 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 1436 ns 1436 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 35.8 ns 35.8 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 2.49 % 2.49 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 1128 ns 1128 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 1147 ns 1147 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 69.6 ns 69.6 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 6.17 % 6.17 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 858 ns 858 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 846 ns 846 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 40.9 ns 40.9 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 4.76 % 4.76 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 730 ns 730 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 724 ns 724 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 22.2 ns 22.2 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.03 % 3.03 % 10 --- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 581542 ns 581546 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 576314 ns 576319 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 14331 ns 14332 ns 10 -std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 2.46 % 2.46 % 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 207680 ns 207682 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 209032 ns 209032 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 7880 ns 7881 ns 10 -std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.79 % 3.79 % 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 52577 ns 52578 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 51856 ns 51856 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 1859 ns 1859 ns 10 -lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.53 % 3.53 % 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 49889 ns 49889 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 49640 ns 49640 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 922 ns 922 ns 10 -lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.85 % 1.85 % 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 50097 ns 50097 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 50166 ns 50166 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 997 ns 997 ns 10 -lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.99 % 1.99 % 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 49930 ns 49930 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 49358 ns 49359 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 1206 ns 1206 ns 10 -lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 2.42 % 2.42 % 10 --- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; ... str << str_var1 << str_var2;_mean 11739 ns 11739 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_median 11709 ns 11709 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_stddev 342 ns 342 ns 10 -std::stringstream str; ... str << str_var1 << str_var2;_cv 2.91 % 2.91 % 10 -std::string str; ... str += str_var1 + str_var2;_mean 4587 ns 4587 ns 10 -std::string str; ... str += str_var1 + str_var2;_median 4642 ns 4642 ns 10 -std::string str; ... str += str_var1 + str_var2;_stddev 172 ns 172 ns 10 -std::string str; ... str += str_var1 + str_var2;_cv 3.75 % 3.75 % 10 -lstringa<16> str; ... str += str_var1 + str_var2;_mean 1593 ns 1593 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_median 1590 ns 1590 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_stddev 43.9 ns 43.9 ns 10 -lstringa<16> str; ... str += str_var1 + str_var2;_cv 2.75 % 2.75 % 10 -lstringa<128> str; ... str += str_var1 + str_var2;_mean 1343 ns 1343 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_median 1326 ns 1326 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_stddev 62.5 ns 62.5 ns 10 -lstringa<128> str; ... str += str_var1 + str_var2;_cv 4.65 % 4.65 % 10 -lstringa<512> str; ... str += str_var1 + str_var2;_mean 1057 ns 1057 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_median 1058 ns 1058 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_stddev 38.9 ns 38.9 ns 10 -lstringa<512> str; ... str += str_var1 + str_var2;_cv 3.68 % 3.68 % 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_mean 929 ns 929 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_median 925 ns 925 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 22.0 ns 21.9 ns 10 -lstringa<1024> str; ... str += str_var1 + str_var2;_cv 2.36 % 2.36 % 10 --- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::stringstream str; str << "test = " << k << " times";_mean 19990 ns 19990 ns 10 -std::stringstream str; str << "test = " << k << " times";_median 19963 ns 19963 ns 10 -std::stringstream str; str << "test = " << k << " times";_stddev 939 ns 939 ns 10 -std::stringstream str; str << "test = " << k << " times";_cv 4.70 % 4.70 % 10 -std::string str = "test = " + std::to_string(k) + " times";_mean 3781 ns 3781 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_median 3755 ns 3755 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_stddev 158 ns 158 ns 10 -std::string str = "test = " + std::to_string(k) + " times";_cv 4.19 % 4.19 % 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 8018 ns 8018 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 7947 ns 7947 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 213 ns 213 ns 10 -char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 2.66 % 2.66 % 10 -std::string str = std::format("test = {} times", k);_mean 5058 ns 5058 ns 10 -std::string str = std::format("test = {} times", k);_median 5013 ns 5013 ns 10 -std::string str = std::format("test = {} times", k);_stddev 252 ns 252 ns 10 -std::string str = std::format("test = {} times", k);_cv 4.98 % 4.98 % 10 -lstringa<8> str; str.format("test = {} times", k);_mean 7141 ns 7141 ns 10 -lstringa<8> str; str.format("test = {} times", k);_median 7164 ns 7164 ns 10 -lstringa<8> str; str.format("test = {} times", k);_stddev 186 ns 186 ns 10 -lstringa<8> str; str.format("test = {} times", k);_cv 2.60 % 2.60 % 10 -lstringa<32> str; str.format("test = {} times", k);_mean 5041 ns 5041 ns 10 -lstringa<32> str; str.format("test = {} times", k);_median 4992 ns 4992 ns 10 -lstringa<32> str; str.format("test = {} times", k);_stddev 144 ns 144 ns 10 -lstringa<32> str; str.format("test = {} times", k);_cv 2.86 % 2.86 % 10 -lstringa<8> str = "test = " + k + " times";_mean 1865 ns 1865 ns 10 -lstringa<8> str = "test = " + k + " times";_median 1834 ns 1834 ns 10 -lstringa<8> str = "test = " + k + " times";_stddev 81.0 ns 81.1 ns 10 -lstringa<8> str = "test = " + k + " times";_cv 4.35 % 4.35 % 10 -lstringa<32> str = "test = " + k + " times";_mean 1202 ns 1202 ns 10 -lstringa<32> str = "test = " + k + " times";_median 1208 ns 1208 ns 10 -lstringa<32> str = "test = " + k + " times";_stddev 33.4 ns 33.4 ns 10 -lstringa<32> str = "test = " + k + " times";_cv 2.78 % 2.78 % 10 -stringa str = "test = " + k + " times";_mean 1715 ns 1715 ns 10 -stringa str = "test = " + k + " times";_median 1691 ns 1691 ns 10 -stringa str = "test = " + k + " times";_stddev 87.3 ns 87.3 ns 10 -stringa str = "test = " + k + " times";_cv 5.09 % 5.09 % 10 --- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000 -std::string::find + substr + std::strtol_mean 1618 ns 1618 ns 10 -std::string::find + substr + std::strtol_median 1612 ns 1612 ns 10 -std::string::find + substr + std::strtol_stddev 62.7 ns 62.7 ns 10 -std::string::find + substr + std::strtol_cv 3.87 % 3.87 % 10 -ssa::splitter + ssa::as_int_mean 655 ns 655 ns 10 -ssa::splitter + ssa::as_int_median 657 ns 657 ns 10 -ssa::splitter + ssa::as_int_stddev 18.0 ns 18.0 ns 10 -ssa::splitter + ssa::as_int_cv 2.75 % 2.75 % 10 -ssa::splitf + functor_mean 899 ns 899 ns 10 -ssa::splitf + functor_median 894 ns 894 ns 10 -ssa::splitf + functor_stddev 33.7 ns 33.7 ns 10 -ssa::splitf + functor_cv 3.75 % 3.75 % 10 --- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Naive (and wrong) replace symbols with std::string find + replace_mean 6193 ns 6193 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_median 6168 ns 6168 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_stddev 264 ns 264 ns 10 -Naive (and wrong) replace symbols with std::string find + replace_cv 4.26 % 4.26 % 10 -replace symbols with std::string find_first_of + replace_mean 9978 ns 9978 ns 10 -replace symbols with std::string find_first_of + replace_median 9940 ns 9940 ns 10 -replace symbols with std::string find_first_of + replace_stddev 147 ns 147 ns 10 -replace symbols with std::string find_first_of + replace_cv 1.48 % 1.48 % 10 -replace symbols with std::string_view find_first_of + copy_mean 10198 ns 10198 ns 10 -replace symbols with std::string_view find_first_of + copy_median 10229 ns 10229 ns 10 -replace symbols with std::string_view find_first_of + copy_stddev 361 ns 361 ns 10 -replace symbols with std::string_view find_first_of + copy_cv 3.54 % 3.54 % 10 -replace runtime symbols with string expressions and without remembering all search results_mean 5706 ns 5706 ns 10 -replace runtime symbols with string expressions and without remembering all search results_median 5705 ns 5705 ns 10 -replace runtime symbols with string expressions and without remembering all search results_stddev 208 ns 208 ns 10 -replace runtime symbols with string expressions and without remembering all search results_cv 3.65 % 3.65 % 10 -replace runtime symbols with simstr and memorization of all search results_mean 5029 ns 5029 ns 10 -replace runtime symbols with simstr and memorization of all search results_median 5010 ns 5010 ns 10 -replace runtime symbols with simstr and memorization of all search results_stddev 172 ns 172 ns 10 -replace runtime symbols with simstr and memorization of all search results_cv 3.41 % 3.41 % 10 -replace const symbols with string expressions and without remembering all search results_mean 4946 ns 4946 ns 10 -replace const symbols with string expressions and without remembering all search results_median 4876 ns 4876 ns 10 -replace const symbols with string expressions and without remembering all search results_stddev 239 ns 239 ns 10 -replace const symbols with string expressions and without remembering all search results_cv 4.84 % 4.84 % 10 -replace const symbols with string expressions and memorization of all search results_mean 4198 ns 4198 ns 10 -replace const symbols with string expressions and memorization of all search results_median 4225 ns 4225 ns 10 -replace const symbols with string expressions and memorization of all search results_stddev 117 ns 117 ns 10 -replace const symbols with string expressions and memorization of all search results_cv 2.78 % 2.78 % 10 --- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000 -Short Naive (and wrong) replace symbols with std::string find + replace_mean 1016 ns 1016 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_median 1026 ns 1026 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_stddev 47.9 ns 47.9 ns 10 -Short Naive (and wrong) replace symbols with std::string find + replace_cv 4.71 % 4.71 % 10 -Short replace symbols with std::string find_first_of + replace_mean 1431 ns 1431 ns 10 -Short replace symbols with std::string find_first_of + replace_median 1441 ns 1441 ns 10 -Short replace symbols with std::string find_first_of + replace_stddev 65.0 ns 65.0 ns 10 -Short replace symbols with std::string find_first_of + replace_cv 4.54 % 4.54 % 10 -Short replace symbols with std::string_view find_first_of + copy_mean 1417 ns 1417 ns 10 -Short replace symbols with std::string_view find_first_of + copy_median 1410 ns 1410 ns 10 -Short replace symbols with std::string_view find_first_of + copy_stddev 50.9 ns 50.9 ns 10 -Short replace symbols with std::string_view find_first_of + copy_cv 3.59 % 3.59 % 10 -Short replace runtime symbols with string expressions and without remembering all search results_mean 795 ns 795 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_median 800 ns 800 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_stddev 30.4 ns 30.5 ns 10 -Short replace runtime symbols with string expressions and without remembering all search results_cv 3.83 % 3.83 % 10 -Short replace runtime symbols with simstr and memorization of all search results_mean 847 ns 847 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_median 844 ns 844 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_stddev 15.6 ns 15.6 ns 10 -Short replace runtime symbols with simstr and memorization of all search results_cv 1.84 % 1.84 % 10 -Short replace const symbols with string expressions and without remembering all search results_mean 626 ns 626 ns 10 -Short replace const symbols with string expressions and without remembering all search results_median 624 ns 624 ns 10 -Short replace const symbols with string expressions and without remembering all search results_stddev 22.5 ns 22.5 ns 10 -Short replace const symbols with string expressions and without remembering all search results_cv 3.60 % 3.60 % 10 -Short replace const symbols with string expressions and memorization of all search results_mean 706 ns 706 ns 10 -Short replace const symbols with string expressions and memorization of all search results_median 696 ns 696 ns 10 -Short replace const symbols with string expressions and memorization of all search results_stddev 33.5 ns 33.5 ns 10 -Short replace const symbols with string expressions and memorization of all search results_cv 4.75 % 4.75 % 10 ------ Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to ---- in std::string|64_mean 832 ns 832 ns 10 -replace bb to ---- in std::string|64_median 840 ns 840 ns 10 -replace bb to ---- in std::string|64_stddev 48.0 ns 48.0 ns 10 -replace bb to ---- in std::string|64_cv 5.77 % 5.77 % 10 -replace bb to ---- in std::string|256_mean 2559 ns 2559 ns 10 -replace bb to ---- in std::string|256_median 2526 ns 2526 ns 10 -replace bb to ---- in std::string|256_stddev 150 ns 150 ns 10 -replace bb to ---- in std::string|256_cv 5.88 % 5.88 % 10 -replace bb to ---- in std::string|512_mean 4466 ns 4466 ns 10 -replace bb to ---- in std::string|512_median 4489 ns 4489 ns 10 -replace bb to ---- in std::string|512_stddev 88.8 ns 88.8 ns 10 -replace bb to ---- in std::string|512_cv 1.99 % 1.99 % 10 -replace bb to ---- in std::string|1024_mean 8916 ns 8916 ns 10 -replace bb to ---- in std::string|1024_median 8819 ns 8819 ns 10 -replace bb to ---- in std::string|1024_stddev 415 ns 415 ns 10 -replace bb to ---- in std::string|1024_cv 4.65 % 4.65 % 10 -replace bb to ---- in std::string|2048_mean 19324 ns 19324 ns 10 -replace bb to ---- in std::string|2048_median 19249 ns 19249 ns 10 -replace bb to ---- in std::string|2048_stddev 511 ns 511 ns 10 -replace bb to ---- in std::string|2048_cv 2.65 % 2.65 % 10 -replace bb to ---- in lstringa<8>|64_mean 749 ns 749 ns 10 -replace bb to ---- in lstringa<8>|64_median 752 ns 752 ns 10 -replace bb to ---- in lstringa<8>|64_stddev 17.0 ns 17.0 ns 10 -replace bb to ---- in lstringa<8>|64_cv 2.28 % 2.28 % 10 -replace bb to ---- in lstringa<8>|256_mean 2053 ns 2053 ns 10 -replace bb to ---- in lstringa<8>|256_median 2088 ns 2088 ns 10 -replace bb to ---- in lstringa<8>|256_stddev 98.5 ns 98.5 ns 10 -replace bb to ---- in lstringa<8>|256_cv 4.80 % 4.80 % 10 -replace bb to ---- in lstringa<8>|512_mean 3754 ns 3754 ns 10 -replace bb to ---- in lstringa<8>|512_median 3695 ns 3695 ns 10 -replace bb to ---- in lstringa<8>|512_stddev 162 ns 162 ns 10 -replace bb to ---- in lstringa<8>|512_cv 4.32 % 4.32 % 10 -replace bb to ---- in lstringa<8>|1024_mean 6775 ns 6775 ns 10 -replace bb to ---- in lstringa<8>|1024_median 6776 ns 6776 ns 10 -replace bb to ---- in lstringa<8>|1024_stddev 196 ns 196 ns 10 -replace bb to ---- in lstringa<8>|1024_cv 2.89 % 2.89 % 10 -replace bb to ---- in lstringa<8>|2048_mean 13478 ns 13478 ns 10 -replace bb to ---- in lstringa<8>|2048_median 13420 ns 13421 ns 10 -replace bb to ---- in lstringa<8>|2048_stddev 436 ns 436 ns 10 -replace bb to ---- in lstringa<8>|2048_cv 3.24 % 3.24 % 10 -replace bb to ---- by init stringa|64_mean 503 ns 503 ns 10 -replace bb to ---- by init stringa|64_median 504 ns 504 ns 10 -replace bb to ---- by init stringa|64_stddev 19.5 ns 19.5 ns 10 -replace bb to ---- by init stringa|64_cv 3.86 % 3.86 % 10 -replace bb to ---- by init stringa|256_mean 1848 ns 1848 ns 10 -replace bb to ---- by init stringa|256_median 1828 ns 1828 ns 10 -replace bb to ---- by init stringa|256_stddev 80.6 ns 80.6 ns 10 -replace bb to ---- by init stringa|256_cv 4.36 % 4.36 % 10 -replace bb to ---- by init stringa|512_mean 3537 ns 3537 ns 10 -replace bb to ---- by init stringa|512_median 3552 ns 3552 ns 10 -replace bb to ---- by init stringa|512_stddev 85.6 ns 85.6 ns 10 -replace bb to ---- by init stringa|512_cv 2.42 % 2.42 % 10 -replace bb to ---- by init stringa|1024_mean 6923 ns 6923 ns 10 -replace bb to ---- by init stringa|1024_median 6991 ns 6991 ns 10 -replace bb to ---- by init stringa|1024_stddev 177 ns 177 ns 10 -replace bb to ---- by init stringa|1024_cv 2.55 % 2.55 % 10 -replace bb to ---- by init stringa|2048_mean 13739 ns 13739 ns 10 -replace bb to ---- by init stringa|2048_median 13659 ns 13660 ns 10 -replace bb to ---- by init stringa|2048_stddev 473 ns 473 ns 10 -replace bb to ---- by init stringa|2048_cv 3.44 % 3.44 % 10 ------ Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -replace bb to -- in std::string|64_mean 570 ns 570 ns 10 -replace bb to -- in std::string|64_median 565 ns 565 ns 10 -replace bb to -- in std::string|64_stddev 20.7 ns 20.7 ns 10 -replace bb to -- in std::string|64_cv 3.63 % 3.63 % 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_stddev 11.0 ns 11.0 ns 10 +lstringa<1024> str; ... str += "abbaabbaabbaabba";_cv 2.20 % 2.20 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_mean 11807 ns 11807 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_median 11726 ns 11726 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_stddev 449 ns 449 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba";_cv 3.80 % 3.80 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_mean 4085 ns 4085 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_median 4020 ns 4020 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_stddev 196 ns 196 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba";_cv 4.81 % 4.81 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_mean 1439 ns 1439 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_median 1449 ns 1449 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_stddev 74.9 ns 74.9 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba";_cv 5.20 % 5.20 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_mean 1179 ns 1179 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_median 1186 ns 1186 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_stddev 98.7 ns 98.7 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba";_cv 8.37 % 8.37 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_mean 934 ns 934 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_median 924 ns 924 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_stddev 80.9 ns 80.9 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba";_cv 8.67 % 8.67 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_mean 734 ns 734 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_median 727 ns 727 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_stddev 22.0 ns 22.0 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba";_cv 3.00 % 3.00 % 10 +-- Append string of 16 bytes and const literal of 16 bytes 2048 times, 65536 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_mean 609176 ns 609186 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_median 604318 ns 604351 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_stddev 23440 ns 23440 ns 10 +std::stringstream str; ... str << str_var << "abbaabbaabbaabba"; 2048 times_cv 3.85 % 3.85 % 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 207760 ns 207762 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 210493 ns 210494 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 8896 ns 8897 ns 10 +std::string str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 4.28 % 4.28 % 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 53812 ns 53812 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 53544 ns 53544 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 2281 ns 2281 ns 10 +lstringa<8> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 4.24 % 4.24 % 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 51889 ns 51889 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 51942 ns 51942 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 1660 ns 1660 ns 10 +lstringa<128> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 3.20 % 3.20 % 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 50113 ns 50114 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 50056 ns 50057 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 811 ns 811 ns 10 +lstringa<512> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 1.62 % 1.62 % 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_mean 52780 ns 52781 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_median 51519 ns 51519 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_stddev 2889 ns 2889 ns 10 +lstringa<1024> str; ... str += str_var + "abbaabbaabbaabba"; 2048 times_cv 5.47 % 5.47 % 10 +-- Append 2 string of 16 bytes 32 times, 1024 total length --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; ... str << str_var1 << str_var2;_mean 11836 ns 11836 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_median 11842 ns 11842 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_stddev 396 ns 396 ns 10 +std::stringstream str; ... str << str_var1 << str_var2;_cv 3.35 % 3.35 % 10 +std::string str; ... str += str_var1 + str_var2;_mean 4507 ns 4507 ns 10 +std::string str; ... str += str_var1 + str_var2;_median 4543 ns 4543 ns 10 +std::string str; ... str += str_var1 + str_var2;_stddev 123 ns 123 ns 10 +std::string str; ... str += str_var1 + str_var2;_cv 2.73 % 2.73 % 10 +lstringa<16> str; ... str += str_var1 + str_var2;_mean 1657 ns 1657 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_median 1646 ns 1646 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_stddev 80.2 ns 80.2 ns 10 +lstringa<16> str; ... str += str_var1 + str_var2;_cv 4.84 % 4.84 % 10 +lstringa<128> str; ... str += str_var1 + str_var2;_mean 1413 ns 1413 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_median 1392 ns 1392 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_stddev 97.3 ns 97.3 ns 10 +lstringa<128> str; ... str += str_var1 + str_var2;_cv 6.89 % 6.89 % 10 +lstringa<512> str; ... str += str_var1 + str_var2;_mean 1088 ns 1088 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_median 1065 ns 1065 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_stddev 58.8 ns 58.8 ns 10 +lstringa<512> str; ... str += str_var1 + str_var2;_cv 5.40 % 5.40 % 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_mean 977 ns 977 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_median 979 ns 979 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_stddev 45.7 ns 45.7 ns 10 +lstringa<1024> str; ... str += str_var1 + str_var2;_cv 4.68 % 4.68 % 10 +-- Append text, number, text --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::stringstream str; str << "test = " << k << " times";_mean 19450 ns 19450 ns 10 +std::stringstream str; str << "test = " << k << " times";_median 19297 ns 19297 ns 10 +std::stringstream str; str << "test = " << k << " times";_stddev 1456 ns 1456 ns 10 +std::stringstream str; str << "test = " << k << " times";_cv 7.49 % 7.49 % 10 +std::string str = "test = " + std::to_string(k) + " times";_mean 3261 ns 3261 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_median 3216 ns 3216 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_stddev 181 ns 181 ns 10 +std::string str = "test = " + std::to_string(k) + " times";_cv 5.55 % 5.55 % 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_mean 7677 ns 7677 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_median 7790 ns 7791 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_stddev 383 ns 383 ns 10 +char buf[100]; sprintf(buf, "test = %u times", k); std::string str = buf;_cv 4.99 % 4.99 % 10 +std::string str = std::format("test = {} times", k);_mean 4200 ns 4200 ns 10 +std::string str = std::format("test = {} times", k);_median 4204 ns 4204 ns 10 +std::string str = std::format("test = {} times", k);_stddev 136 ns 136 ns 10 +std::string str = std::format("test = {} times", k);_cv 3.24 % 3.24 % 10 +lstringa<8> str; str.format("test = {} times", k);_mean 6598 ns 6598 ns 10 +lstringa<8> str; str.format("test = {} times", k);_median 6515 ns 6515 ns 10 +lstringa<8> str; str.format("test = {} times", k);_stddev 407 ns 407 ns 10 +lstringa<8> str; str.format("test = {} times", k);_cv 6.17 % 6.17 % 10 +lstringa<32> str; str.format("test = {} times", k);_mean 4632 ns 4632 ns 10 +lstringa<32> str; str.format("test = {} times", k);_median 4696 ns 4696 ns 10 +lstringa<32> str; str.format("test = {} times", k);_stddev 149 ns 149 ns 10 +lstringa<32> str; str.format("test = {} times", k);_cv 3.22 % 3.22 % 10 +lstringa<8> str = "test = " + k + " times";_mean 1342 ns 1342 ns 10 +lstringa<8> str = "test = " + k + " times";_median 1347 ns 1347 ns 10 +lstringa<8> str = "test = " + k + " times";_stddev 41.9 ns 41.9 ns 10 +lstringa<8> str = "test = " + k + " times";_cv 3.13 % 3.13 % 10 +lstringa<32> str = "test = " + k + " times";_mean 614 ns 614 ns 10 +lstringa<32> str = "test = " + k + " times";_median 603 ns 603 ns 10 +lstringa<32> str = "test = " + k + " times";_stddev 35.5 ns 35.5 ns 10 +lstringa<32> str = "test = " + k + " times";_cv 5.78 % 5.78 % 10 +stringa str = "test = " + k + " times";_mean 1303 ns 1303 ns 10 +stringa str = "test = " + k + " times";_median 1307 ns 1307 ns 10 +stringa str = "test = " + k + " times";_stddev 58.0 ns 58.0 ns 10 +stringa str = "test = " + k + " times";_cv 4.45 % 4.45 % 10 +-- Split text and convert to int --/repeats:1 0.000 ns 0.000 ns 1000000000000 +std::string::find + substr + std::strtol_mean 1414 ns 1414 ns 10 +std::string::find + substr + std::strtol_median 1408 ns 1408 ns 10 +std::string::find + substr + std::strtol_stddev 67.5 ns 67.5 ns 10 +std::string::find + substr + std::strtol_cv 4.78 % 4.78 % 10 +ssa::splitter + ssa::as_int_mean 670 ns 670 ns 10 +ssa::splitter + ssa::as_int_median 654 ns 654 ns 10 +ssa::splitter + ssa::as_int_stddev 34.0 ns 34.0 ns 10 +ssa::splitter + ssa::as_int_cv 5.07 % 5.07 % 10 +ssa::splitf + functor_mean 939 ns 939 ns 10 +ssa::splitf + functor_median 927 ns 927 ns 10 +ssa::splitf + functor_stddev 32.8 ns 32.8 ns 10 +ssa::splitf + functor_cv 3.49 % 3.49 % 10 +-- Replace symbols in text ~400 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Naive (and wrong) replace symbols with std::string find + replace_mean 6175 ns 6175 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_median 6116 ns 6116 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_stddev 236 ns 236 ns 10 +Naive (and wrong) replace symbols with std::string find + replace_cv 3.82 % 3.82 % 10 +replace symbols with std::string find_first_of + replace_mean 10124 ns 10125 ns 10 +replace symbols with std::string find_first_of + replace_median 10071 ns 10071 ns 10 +replace symbols with std::string find_first_of + replace_stddev 222 ns 222 ns 10 +replace symbols with std::string find_first_of + replace_cv 2.20 % 2.20 % 10 +replace symbols with std::string_view find_first_of + copy_mean 5505 ns 5505 ns 10 +replace symbols with std::string_view find_first_of + copy_median 5527 ns 5527 ns 10 +replace symbols with std::string_view find_first_of + copy_stddev 215 ns 215 ns 10 +replace symbols with std::string_view find_first_of + copy_cv 3.91 % 3.91 % 10 +replace runtime symbols with string expressions and without remembering all search results_mean 5599 ns 5599 ns 10 +replace runtime symbols with string expressions and without remembering all search results_median 5526 ns 5526 ns 10 +replace runtime symbols with string expressions and without remembering all search results_stddev 255 ns 255 ns 10 +replace runtime symbols with string expressions and without remembering all search results_cv 4.56 % 4.56 % 10 +replace runtime symbols with simstr and memorization of all search results_mean 5123 ns 5123 ns 10 +replace runtime symbols with simstr and memorization of all search results_median 5130 ns 5130 ns 10 +replace runtime symbols with simstr and memorization of all search results_stddev 196 ns 196 ns 10 +replace runtime symbols with simstr and memorization of all search results_cv 3.83 % 3.83 % 10 +replace const symbols with string expressions and without remembering all search results_mean 4773 ns 4773 ns 10 +replace const symbols with string expressions and without remembering all search results_median 4789 ns 4789 ns 10 +replace const symbols with string expressions and without remembering all search results_stddev 152 ns 152 ns 10 +replace const symbols with string expressions and without remembering all search results_cv 3.18 % 3.18 % 10 +replace const symbols with string expressions and memorization of all search results_mean 4477 ns 4477 ns 10 +replace const symbols with string expressions and memorization of all search results_median 4417 ns 4417 ns 10 +replace const symbols with string expressions and memorization of all search results_stddev 232 ns 232 ns 10 +replace const symbols with string expressions and memorization of all search results_cv 5.18 % 5.18 % 10 +-- Replace symbols in text ~40 symbols --/repeats:1 0.000 ns 0.000 ns 1000000000000 +Short Naive (and wrong) replace symbols with std::string find + replace_mean 827 ns 827 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_median 805 ns 805 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_stddev 55.5 ns 55.5 ns 10 +Short Naive (and wrong) replace symbols with std::string find + replace_cv 6.71 % 6.71 % 10 +Short replace symbols with std::string find_first_of + replace_mean 1187 ns 1187 ns 10 +Short replace symbols with std::string find_first_of + replace_median 1191 ns 1192 ns 10 +Short replace symbols with std::string find_first_of + replace_stddev 22.7 ns 22.7 ns 10 +Short replace symbols with std::string find_first_of + replace_cv 1.92 % 1.92 % 10 +Short replace symbols with std::string_view find_first_of + copy_mean 694 ns 694 ns 10 +Short replace symbols with std::string_view find_first_of + copy_median 695 ns 695 ns 10 +Short replace symbols with std::string_view find_first_of + copy_stddev 35.3 ns 35.3 ns 10 +Short replace symbols with std::string_view find_first_of + copy_cv 5.09 % 5.09 % 10 +Short replace runtime symbols with string expressions and without remembering all search results_mean 583 ns 583 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_median 580 ns 580 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_stddev 14.7 ns 14.7 ns 10 +Short replace runtime symbols with string expressions and without remembering all search results_cv 2.52 % 2.52 % 10 +Short replace runtime symbols with simstr and memorization of all search results_mean 669 ns 669 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_median 653 ns 653 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_stddev 41.6 ns 41.6 ns 10 +Short replace runtime symbols with simstr and memorization of all search results_cv 6.22 % 6.22 % 10 +Short replace const symbols with string expressions and without remembering all search results_mean 440 ns 440 ns 10 +Short replace const symbols with string expressions and without remembering all search results_median 434 ns 434 ns 10 +Short replace const symbols with string expressions and without remembering all search results_stddev 21.5 ns 21.5 ns 10 +Short replace const symbols with string expressions and without remembering all search results_cv 4.89 % 4.89 % 10 +Short replace const symbols with string expressions and memorization of all search results_mean 512 ns 512 ns 10 +Short replace const symbols with string expressions and memorization of all search results_median 497 ns 497 ns 10 +Short replace const symbols with string expressions and memorization of all search results_stddev 42.4 ns 42.4 ns 10 +Short replace const symbols with string expressions and memorization of all search results_cv 8.29 % 8.29 % 10 +----- Replace All Str To Longer Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to ---- in std::string|64_mean 759 ns 759 ns 10 +replace bb to ---- in std::string|64_median 756 ns 756 ns 10 +replace bb to ---- in std::string|64_stddev 35.6 ns 35.6 ns 10 +replace bb to ---- in std::string|64_cv 4.69 % 4.69 % 10 +replace bb to ---- in std::string|256_mean 2371 ns 2371 ns 10 +replace bb to ---- in std::string|256_median 2356 ns 2356 ns 10 +replace bb to ---- in std::string|256_stddev 141 ns 141 ns 10 +replace bb to ---- in std::string|256_cv 5.97 % 5.97 % 10 +replace bb to ---- in std::string|512_mean 4397 ns 4397 ns 10 +replace bb to ---- in std::string|512_median 4347 ns 4347 ns 10 +replace bb to ---- in std::string|512_stddev 209 ns 209 ns 10 +replace bb to ---- in std::string|512_cv 4.75 % 4.75 % 10 +replace bb to ---- in std::string|1024_mean 8983 ns 8983 ns 10 +replace bb to ---- in std::string|1024_median 8903 ns 8903 ns 10 +replace bb to ---- in std::string|1024_stddev 716 ns 716 ns 10 +replace bb to ---- in std::string|1024_cv 7.97 % 7.97 % 10 +replace bb to ---- in std::string|2048_mean 20059 ns 20059 ns 10 +replace bb to ---- in std::string|2048_median 20184 ns 20184 ns 10 +replace bb to ---- in std::string|2048_stddev 599 ns 599 ns 10 +replace bb to ---- in std::string|2048_cv 2.99 % 2.99 % 10 +replace bb to ---- in lstringa<8>|64_mean 734 ns 734 ns 10 +replace bb to ---- in lstringa<8>|64_median 729 ns 729 ns 10 +replace bb to ---- in lstringa<8>|64_stddev 12.3 ns 12.3 ns 10 +replace bb to ---- in lstringa<8>|64_cv 1.67 % 1.67 % 10 +replace bb to ---- in lstringa<8>|256_mean 2096 ns 2096 ns 10 +replace bb to ---- in lstringa<8>|256_median 2094 ns 2094 ns 10 +replace bb to ---- in lstringa<8>|256_stddev 98.1 ns 98.1 ns 10 +replace bb to ---- in lstringa<8>|256_cv 4.68 % 4.68 % 10 +replace bb to ---- in lstringa<8>|512_mean 3770 ns 3770 ns 10 +replace bb to ---- in lstringa<8>|512_median 3744 ns 3744 ns 10 +replace bb to ---- in lstringa<8>|512_stddev 171 ns 171 ns 10 +replace bb to ---- in lstringa<8>|512_cv 4.53 % 4.53 % 10 +replace bb to ---- in lstringa<8>|1024_mean 7288 ns 7288 ns 10 +replace bb to ---- in lstringa<8>|1024_median 7121 ns 7121 ns 10 +replace bb to ---- in lstringa<8>|1024_stddev 470 ns 470 ns 10 +replace bb to ---- in lstringa<8>|1024_cv 6.45 % 6.45 % 10 +replace bb to ---- in lstringa<8>|2048_mean 13342 ns 13342 ns 10 +replace bb to ---- in lstringa<8>|2048_median 13306 ns 13306 ns 10 +replace bb to ---- in lstringa<8>|2048_stddev 401 ns 401 ns 10 +replace bb to ---- in lstringa<8>|2048_cv 3.01 % 3.01 % 10 +replace bb to ---- by init stringa|64_mean 498 ns 498 ns 10 +replace bb to ---- by init stringa|64_median 490 ns 490 ns 10 +replace bb to ---- by init stringa|64_stddev 42.1 ns 42.1 ns 10 +replace bb to ---- by init stringa|64_cv 8.46 % 8.46 % 10 +replace bb to ---- by init stringa|256_mean 1896 ns 1896 ns 10 +replace bb to ---- by init stringa|256_median 1905 ns 1905 ns 10 +replace bb to ---- by init stringa|256_stddev 42.1 ns 42.1 ns 10 +replace bb to ---- by init stringa|256_cv 2.22 % 2.22 % 10 +replace bb to ---- by init stringa|512_mean 3611 ns 3611 ns 10 +replace bb to ---- by init stringa|512_median 3605 ns 3605 ns 10 +replace bb to ---- by init stringa|512_stddev 99.0 ns 99.0 ns 10 +replace bb to ---- by init stringa|512_cv 2.74 % 2.74 % 10 +replace bb to ---- by init stringa|1024_mean 6933 ns 6933 ns 10 +replace bb to ---- by init stringa|1024_median 6974 ns 6974 ns 10 +replace bb to ---- by init stringa|1024_stddev 208 ns 208 ns 10 +replace bb to ---- by init stringa|1024_cv 3.00 % 3.00 % 10 +replace bb to ---- by init stringa|2048_mean 13812 ns 13812 ns 10 +replace bb to ---- by init stringa|2048_median 13831 ns 13831 ns 10 +replace bb to ---- by init stringa|2048_stddev 412 ns 412 ns 10 +replace bb to ---- by init stringa|2048_cv 2.98 % 2.98 % 10 +----- Replace All Str To Same Size ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +replace bb to -- in std::string|64_mean 545 ns 545 ns 10 +replace bb to -- in std::string|64_median 546 ns 546 ns 10 +replace bb to -- in std::string|64_stddev 13.4 ns 13.4 ns 10 +replace bb to -- in std::string|64_cv 2.45 % 2.45 % 10 replace bb to -- in std::string|256_mean 1885 ns 1885 ns 10 -replace bb to -- in std::string|256_median 1910 ns 1910 ns 10 -replace bb to -- in std::string|256_stddev 84.9 ns 84.8 ns 10 -replace bb to -- in std::string|256_cv 4.50 % 4.50 % 10 -replace bb to -- in std::string|512_mean 3523 ns 3523 ns 10 -replace bb to -- in std::string|512_median 3551 ns 3551 ns 10 -replace bb to -- in std::string|512_stddev 110 ns 110 ns 10 -replace bb to -- in std::string|512_cv 3.13 % 3.13 % 10 -replace bb to -- in std::string|1024_mean 6916 ns 6916 ns 10 -replace bb to -- in std::string|1024_median 6933 ns 6933 ns 10 -replace bb to -- in std::string|1024_stddev 153 ns 153 ns 10 -replace bb to -- in std::string|1024_cv 2.21 % 2.21 % 10 -replace bb to -- in std::string|2048_mean 13510 ns 13510 ns 10 -replace bb to -- in std::string|2048_median 13336 ns 13336 ns 10 -replace bb to -- in std::string|2048_stddev 539 ns 539 ns 10 -replace bb to -- in std::string|2048_cv 3.99 % 3.99 % 10 -replace bb to -- in lstringa<8>|64_mean 482 ns 482 ns 10 -replace bb to -- in lstringa<8>|64_median 481 ns 481 ns 10 -replace bb to -- in lstringa<8>|64_stddev 9.24 ns 9.24 ns 10 -replace bb to -- in lstringa<8>|64_cv 1.92 % 1.92 % 10 -replace bb to -- in lstringa<8>|256_mean 1565 ns 1565 ns 10 -replace bb to -- in lstringa<8>|256_median 1571 ns 1571 ns 10 -replace bb to -- in lstringa<8>|256_stddev 44.1 ns 44.1 ns 10 -replace bb to -- in lstringa<8>|256_cv 2.82 % 2.82 % 10 -replace bb to -- in lstringa<8>|512_mean 2921 ns 2921 ns 10 -replace bb to -- in lstringa<8>|512_median 2922 ns 2922 ns 10 -replace bb to -- in lstringa<8>|512_stddev 85.4 ns 85.4 ns 10 -replace bb to -- in lstringa<8>|512_cv 2.92 % 2.92 % 10 -replace bb to -- in lstringa<8>|1024_mean 5594 ns 5594 ns 10 -replace bb to -- in lstringa<8>|1024_median 5521 ns 5521 ns 10 -replace bb to -- in lstringa<8>|1024_stddev 211 ns 211 ns 10 -replace bb to -- in lstringa<8>|1024_cv 3.78 % 3.78 % 10 -replace bb to -- in lstringa<8>|2048_mean 10928 ns 10928 ns 10 -replace bb to -- in lstringa<8>|2048_median 10821 ns 10821 ns 10 -replace bb to -- in lstringa<8>|2048_stddev 362 ns 362 ns 10 -replace bb to -- in lstringa<8>|2048_cv 3.32 % 3.32 % 10 -replace bb to -- by init stringa|64_mean 366 ns 366 ns 10 -replace bb to -- by init stringa|64_median 366 ns 366 ns 10 -replace bb to -- by init stringa|64_stddev 7.95 ns 7.95 ns 10 -replace bb to -- by init stringa|64_cv 2.17 % 2.17 % 10 -replace bb to -- by init stringa|256_mean 1224 ns 1224 ns 10 -replace bb to -- by init stringa|256_median 1222 ns 1222 ns 10 -replace bb to -- by init stringa|256_stddev 47.7 ns 47.7 ns 10 -replace bb to -- by init stringa|256_cv 3.90 % 3.90 % 10 -replace bb to -- by init stringa|512_mean 2221 ns 2221 ns 10 -replace bb to -- by init stringa|512_median 2224 ns 2224 ns 10 -replace bb to -- by init stringa|512_stddev 51.5 ns 51.5 ns 10 -replace bb to -- by init stringa|512_cv 2.32 % 2.32 % 10 -replace bb to -- by init stringa|1024_mean 4235 ns 4235 ns 10 -replace bb to -- by init stringa|1024_median 4272 ns 4272 ns 10 -replace bb to -- by init stringa|1024_stddev 139 ns 139 ns 10 -replace bb to -- by init stringa|1024_cv 3.29 % 3.29 % 10 -replace bb to -- by init stringa|2048_mean 8496 ns 8496 ns 10 -replace bb to -- by init stringa|2048_median 8383 ns 8383 ns 10 -replace bb to -- by init stringa|2048_stddev 251 ns 251 ns 10 -replace bb to -- by init stringa|2048_cv 2.95 % 2.95 % 10 ------ Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -hashStrMapA emplace & find stringa;_mean 5327536 ns 5327558 ns 10 -hashStrMapA emplace & find stringa;_median 5331817 ns 5331835 ns 10 -hashStrMapA emplace & find stringa;_stddev 108137 ns 108137 ns 10 -hashStrMapA emplace & find stringa;_cv 2.03 % 2.03 % 10 -std::unordered_map emplace & find std::string;_mean 6172235 ns 6172321 ns 10 -std::unordered_map emplace & find std::string;_median 6158878 ns 6158954 ns 10 -std::unordered_map emplace & find std::string;_stddev 213624 ns 213652 ns 10 -std::unordered_map emplace & find std::string;_cv 3.46 % 3.46 % 10 -hashStrMapA emplace & find ssa;_mean 5318092 ns 5318133 ns 10 -hashStrMapA emplace & find ssa;_median 5302064 ns 5302156 ns 10 -hashStrMapA emplace & find ssa;_stddev 102639 ns 102632 ns 10 -hashStrMapA emplace & find ssa;_cv 1.93 % 1.93 % 10 -std::unordered_map emplace & find std::string_view;_mean 7002408 ns 7002477 ns 10 -std::unordered_map emplace & find std::string_view;_median 6998707 ns 6998736 ns 10 -std::unordered_map emplace & find std::string_view;_stddev 160708 ns 160734 ns 10 -std::unordered_map emplace & find std::string_view;_cv 2.30 % 2.30 % 10 ------ Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000 -Build func full name std::string;_mean 5576 ns 5576 ns 10 -Build func full name std::string;_median 5532 ns 5532 ns 10 -Build func full name std::string;_stddev 298 ns 298 ns 10 -Build func full name std::string;_cv 5.35 % 5.35 % 10 -Build func full name std::string 1;_mean 5877 ns 5877 ns 10 -Build func full name std::string 1;_median 5896 ns 5896 ns 10 -Build func full name std::string 1;_stddev 247 ns 247 ns 10 -Build func full name std::string 1;_cv 4.20 % 4.20 % 10 -Build func full name std::stream;_mean 16604 ns 16604 ns 10 -Build func full name std::stream;_median 16552 ns 16552 ns 10 -Build func full name std::stream;_stddev 530 ns 530 ns 10 -Build func full name std::stream;_cv 3.19 % 3.19 % 10 -Build func full name stringa;_mean 2780 ns 2780 ns 10 -Build func full name stringa;_median 2749 ns 2749 ns 10 -Build func full name stringa;_stddev 87.2 ns 87.2 ns 10 -Build func full name stringa;_cv 3.13 % 3.14 % 10 -Build func full name stringa 1;_mean 3249 ns 3249 ns 10 -Build func full name stringa 1;_median 3205 ns 3205 ns 10 -Build func full name stringa 1;_stddev 137 ns 137 ns 10 -Build func full name stringa 1;_cv 4.22 % 4.22 % 10 +replace bb to -- in std::string|256_median 1853 ns 1853 ns 10 +replace bb to -- in std::string|256_stddev 113 ns 113 ns 10 +replace bb to -- in std::string|256_cv 6.00 % 6.00 % 10 +replace bb to -- in std::string|512_mean 3368 ns 3368 ns 10 +replace bb to -- in std::string|512_median 3358 ns 3358 ns 10 +replace bb to -- in std::string|512_stddev 107 ns 107 ns 10 +replace bb to -- in std::string|512_cv 3.17 % 3.17 % 10 +replace bb to -- in std::string|1024_mean 6925 ns 6925 ns 10 +replace bb to -- in std::string|1024_median 6910 ns 6910 ns 10 +replace bb to -- in std::string|1024_stddev 344 ns 344 ns 10 +replace bb to -- in std::string|1024_cv 4.97 % 4.97 % 10 +replace bb to -- in std::string|2048_mean 13051 ns 13051 ns 10 +replace bb to -- in std::string|2048_median 12940 ns 12940 ns 10 +replace bb to -- in std::string|2048_stddev 417 ns 417 ns 10 +replace bb to -- in std::string|2048_cv 3.19 % 3.19 % 10 +replace bb to -- in lstringa<8>|64_mean 483 ns 483 ns 10 +replace bb to -- in lstringa<8>|64_median 477 ns 477 ns 10 +replace bb to -- in lstringa<8>|64_stddev 28.3 ns 28.3 ns 10 +replace bb to -- in lstringa<8>|64_cv 5.85 % 5.85 % 10 +replace bb to -- in lstringa<8>|256_mean 1542 ns 1542 ns 10 +replace bb to -- in lstringa<8>|256_median 1531 ns 1531 ns 10 +replace bb to -- in lstringa<8>|256_stddev 78.0 ns 78.0 ns 10 +replace bb to -- in lstringa<8>|256_cv 5.06 % 5.06 % 10 +replace bb to -- in lstringa<8>|512_mean 2827 ns 2827 ns 10 +replace bb to -- in lstringa<8>|512_median 2815 ns 2815 ns 10 +replace bb to -- in lstringa<8>|512_stddev 123 ns 123 ns 10 +replace bb to -- in lstringa<8>|512_cv 4.34 % 4.34 % 10 +replace bb to -- in lstringa<8>|1024_mean 5568 ns 5568 ns 10 +replace bb to -- in lstringa<8>|1024_median 5501 ns 5501 ns 10 +replace bb to -- in lstringa<8>|1024_stddev 387 ns 387 ns 10 +replace bb to -- in lstringa<8>|1024_cv 6.95 % 6.95 % 10 +replace bb to -- in lstringa<8>|2048_mean 10863 ns 10863 ns 10 +replace bb to -- in lstringa<8>|2048_median 10863 ns 10863 ns 10 +replace bb to -- in lstringa<8>|2048_stddev 541 ns 541 ns 10 +replace bb to -- in lstringa<8>|2048_cv 4.98 % 4.98 % 10 +replace bb to -- by init stringa|64_mean 363 ns 363 ns 10 +replace bb to -- by init stringa|64_median 356 ns 356 ns 10 +replace bb to -- by init stringa|64_stddev 23.8 ns 23.8 ns 10 +replace bb to -- by init stringa|64_cv 6.57 % 6.56 % 10 +replace bb to -- by init stringa|256_mean 1249 ns 1249 ns 10 +replace bb to -- by init stringa|256_median 1176 ns 1176 ns 10 +replace bb to -- by init stringa|256_stddev 145 ns 145 ns 10 +replace bb to -- by init stringa|256_cv 11.61 % 11.61 % 10 +replace bb to -- by init stringa|512_mean 2243 ns 2243 ns 10 +replace bb to -- by init stringa|512_median 2206 ns 2206 ns 10 +replace bb to -- by init stringa|512_stddev 131 ns 131 ns 10 +replace bb to -- by init stringa|512_cv 5.85 % 5.85 % 10 +replace bb to -- by init stringa|1024_mean 4204 ns 4204 ns 10 +replace bb to -- by init stringa|1024_median 4185 ns 4185 ns 10 +replace bb to -- by init stringa|1024_stddev 123 ns 123 ns 10 +replace bb to -- by init stringa|1024_cv 2.92 % 2.92 % 10 +replace bb to -- by init stringa|2048_mean 8206 ns 8207 ns 10 +replace bb to -- by init stringa|2048_median 8270 ns 8270 ns 10 +replace bb to -- by init stringa|2048_stddev 171 ns 171 ns 10 +replace bb to -- by init stringa|2048_cv 2.09 % 2.09 % 10 +----- Hash Map insert and find ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +hashStrMapA emplace & find stringa;_mean 5371717 ns 5371764 ns 10 +hashStrMapA emplace & find stringa;_median 5351902 ns 5351957 ns 10 +hashStrMapA emplace & find stringa;_stddev 95139 ns 95136 ns 10 +hashStrMapA emplace & find stringa;_cv 1.77 % 1.77 % 10 +std::unordered_map emplace & find std::string;_mean 5883527 ns 5883602 ns 10 +std::unordered_map emplace & find std::string;_median 5863441 ns 5863495 ns 10 +std::unordered_map emplace & find std::string;_stddev 121360 ns 121344 ns 10 +std::unordered_map emplace & find std::string;_cv 2.06 % 2.06 % 10 +hashStrMapA emplace & find ssa;_mean 5376097 ns 5376160 ns 10 +hashStrMapA emplace & find ssa;_median 5396723 ns 5396748 ns 10 +hashStrMapA emplace & find ssa;_stddev 55934 ns 55933 ns 10 +hashStrMapA emplace & find ssa;_cv 1.04 % 1.04 % 10 +std::unordered_map emplace & find std::string_view;_mean 6884220 ns 6884269 ns 10 +std::unordered_map emplace & find std::string_view;_median 6758571 ns 6758571 ns 10 +std::unordered_map emplace & find std::string_view;_stddev 494224 ns 494235 ns 10 +std::unordered_map emplace & find std::string_view;_cv 7.18 % 7.18 % 10 +----- Build Full Func Name ---------/repeats:1 0.000 ns 0.000 ns 1000000000000 +Build func full name std::string;_mean 4861 ns 4861 ns 10 +Build func full name std::string;_median 4830 ns 4830 ns 10 +Build func full name std::string;_stddev 214 ns 214 ns 10 +Build func full name std::string;_cv 4.41 % 4.41 % 10 +Build func full name std::string 1;_mean 5220 ns 5220 ns 10 +Build func full name std::string 1;_median 5168 ns 5168 ns 10 +Build func full name std::string 1;_stddev 379 ns 379 ns 10 +Build func full name std::string 1;_cv 7.27 % 7.27 % 10 +Build func full name std::stream;_mean 16474 ns 16474 ns 10 +Build func full name std::stream;_median 16253 ns 16253 ns 10 +Build func full name std::stream;_stddev 1049 ns 1049 ns 10 +Build func full name std::stream;_cv 6.37 % 6.37 % 10 +Build func full name stringa;_mean 2853 ns 2853 ns 10 +Build func full name stringa;_median 2857 ns 2857 ns 10 +Build func full name stringa;_stddev 63.2 ns 63.2 ns 10 +Build func full name stringa;_cv 2.22 % 2.22 % 10 +Build func full name stringa 1;_mean 3292 ns 3292 ns 10 +Build func full name stringa 1;_median 3292 ns 3292 ns 10 +Build func full name stringa 1;_stddev 91.3 ns 91.3 ns 10 +Build func full name stringa 1;_cv 2.77 % 2.77 % 10 diff --git a/include/simstr/sstring.h b/include/simstr/sstring.h index 8e877e3..e63ad90 100644 --- a/include/simstr/sstring.h +++ b/include/simstr/sstring.h @@ -293,6 +293,13 @@ constexpr unsigned digit_width() { template constexpr unsigned max_overflow_digits = (sizeof(T) * CHAR_BIT) / digit_width(); +template +struct convert_result { + T value; + IntConvertResult ec; + size_t read; +}; + struct int_convert { // NOLINT inline static const uint8_t NUMBERS[] = { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, @@ -322,7 +329,7 @@ struct int_convert { // NOLINT template requires(Base != 0) - static std::tuple parse(const K* start, const K* current, const K* end, bool negate) { + static convert_result parse(const K* start, const K* current, const K* end, bool negate) { using u_type = std::make_unsigned_t; #ifndef HAS_BUILTIN_OVERFLOW u_type maxMult = 0, maxAdd = 0; @@ -406,7 +413,7 @@ struct int_convert { // NOLINT if (error == IntConvertResult::NotNumber && current > from) { error = IntConvertResult::BadSymbolAtTail; } - return {result, error, current - start}; + return {result, error, size_t(current - start)}; } public: // Если Base = 0 - то пытается определить основание по префиксу 0[xX] как 16, 0 как 8, иначе 10 @@ -415,7 +422,7 @@ public: // If Base = -1 - then tries to determine the base by the prefix 0[xX] as 16, 0[bB] as 2, 0[oO] or 0 as 8, otherwise 10 template requires(Base == -1 || (Base < 37 && Base != 1)) - static std::tuple to_integer(const K* start, size_t len) noexcept { + static convert_result to_integer(const K* start, size_t len) noexcept { const K *ptr = start, *end = ptr + len; bool negate = false; if constexpr (SkipWs) { @@ -467,13 +474,13 @@ public: } return parse(start, --ptr, end, negate); } - return {0, IntConvertResult::Success, ptr - start}; + return {0, IntConvertResult::Success, size_t(ptr - start)}; } return parse(start, ptr, end, negate); } else return parse(start, ptr, end, negate); } - return {0, IntConvertResult::NotNumber, ptr - start}; + return {0, IntConvertResult::NotNumber, size_t(ptr - start)}; } }; @@ -1439,7 +1446,7 @@ public: * - в остальных случаях 10. * @tparam SkipWs - пропускать пробельные символы в начале строки. Пропускаются все символы с ASCII кодами <= 32. * @tparam AllowSign - допустим ли знак '+' перед числом. - * @return std::tuple - кортеж из полученного числа, успешности преобразования и количестве обработанных символов. + * @return convert_result - кортеж из полученного числа, успешности преобразования и количестве обработанных символов. * @en @brief Convert a string to a number of the given type. * @tparam T - the desired number type. * @tparam CheckOverflow - check for overflow. @@ -1452,10 +1459,10 @@ public: * - in other cases 10. * @tparam SkipWs - skip whitespace characters at the beginning of the line. All characters with ASCII codes <= 32 are skipped. * @tparam AllowSign - whether the '+' sign is allowed before a number. - * @return std::tuple - a tuple of the received number, the success of the conversion and the number of characters processed. + * @return convert_result - a tuple of the received number, the success of the conversion and the number of characters processed. */ template - std::tuple to_int() const noexcept { + convert_result to_int() const noexcept { return int_convert::to_integer(_str(), _len()); } /*! @@ -1464,7 +1471,7 @@ public: * @en @brief Convert string to double. * @return std::optional. */ - template + template std::optional to_double() const noexcept { size_t len = _len(); const K* ptr = _str(); @@ -1474,15 +1481,30 @@ public: ptr++; } } - if (len) { - return impl_to_double(ptr, ptr + len); + if constexpr (AllowPlus) { + if (len && *ptr == K('+')) { + ptr++; + len--; + } } - return {}; + if (!len) { + return {}; + } + #ifdef __linux__ + if constexpr(sizeof(K) == 1) { + double d{}; + if (std::from_chars(ptr, ptr + len, d).ec == std::errc{}) { + return d; + } + return {}; + } + #endif + return impl_to_double(ptr, ptr + len); } /*! - * @ru @brief Преобразовать строку в double. + * @ru @brief Преобразовать строку в 16ричной записи в double. Пока работает только для char. * @return std::optional. - * @en @brief Convert string to double. + * @en @brief Convert string in hex form to double. * @return std::optional. */ template requires (sizeof(K) == 1) diff --git a/readme.md b/readme.md index 5cb2f43..0b1c317 100644 --- a/readme.md +++ b/readme.md @@ -1,11 +1,11 @@ # simstr - String object and function library [![CMake on multiple platforms](https://github.com/orefkov/simstr/actions/workflows/cmake-multi-platform.yml/badge.svg)](https://github.com/orefkov/simstr/actions/workflows/cmake-multi-platform.yml) -Version 1.2.5. +Version 1.2.6. On Russian | По-русски -This library contains the implementation of several types of string objects and various algorithms for working with strings. +This library contains the modern implementation of several types of string objects and various algorithms for working with strings. The goal of the library is to make working with strings in C++ as simple and easy as in many other languages, especially scripting languages, while maintaining optimality and performance at the level of C and C++, and even improving them. @@ -47,8 +47,7 @@ then the simstr approach will also be clear to you. - Parsing integers with the possibility of "fine" tuning during compilation - you can set options for checking overflow, skipping whitespace characters, a specific radix or auto-selection by prefixes `0x`, `0`, `0b`, `0o`, admissibility of the `+` sign. Parsing is implemented for all types of strings and characters. -- Parsing double is currently implemented by calling the standard library and only works for `char`, `wchar_t` strings and types compatible with - `wchar_t` in size. +- Parsing doubles for all types of characters. - Minimal Unicode support is included when converting `upper`, `lower` and case-insensitive string comparison. It only works for characters in the first plane of Unicode (up to 0xFFFF), and when changing case, it does not take into account cases where one code point can be converted into several, that is, the case conversion of characters corresponds to `std::towupper`, `std::towlower` for the unicode locale, only faster and can work with any type of characters. diff --git a/readme_ru.md b/readme_ru.md index e191a40..e6d65cd 100644 --- a/readme_ru.md +++ b/readme_ru.md @@ -1,11 +1,11 @@ # simstr - библиотека строковых объектов и функций [![CMake on multiple platforms](https://github.com/orefkov/simstr/actions/workflows/cmake-multi-platform.yml/badge.svg)](https://github.com/orefkov/simstr/actions/workflows/cmake-multi-platform.yml) -Версия 1.2.5. +Версия 1.2.6. On English | По-английски -В этой библиотеке содержится реализация нескольких видов строковых объектов и различных алгоритмов для работы со строками. +В этой библиотеке содержится современная реализация нескольких видов строковых объектов и различных алгоритмов для работы со строками. Цель библиотеки - сделать работу со строками в С++ такой же простой и лёгкой, как во множестве других языков, особенно скриптовых, но при этом сохранив оптимальность и производительность на уровне С и C++, и даже улучшив их. @@ -47,8 +47,7 @@ - Парсинг целых чисел с возможностью "тонкой" настройки при компиляции - можно задавать опции проверки переполнения, пропуск пробельных символов, конкретное основание счисления либо автовыбор по префиксам `0x`, `0`, `0b`, `0o`, допустимость знака `+`. Парсинг реализован для всех видов строк и символов. -- Парсинг double пока реализован вызовом стандартной библиотеки и работает только для строк `char`, `wchar_t` и совместимых с - `wchar_t` по размеру типов. +- Парсинг double для всех типов символов. - Содержится минимальная поддержка Unicode при преобразовании `upper`, `lower` и регистро-независимом сравнении строк. Работает только для символов первой плоскости Unicode (до 0xFFFF), а при смене регистра не учитываются случаи, когда один code point может преобразовываться в несколько, то есть преобразование регистра символов соответствует `std::towupper`, `std::towlower` для unicode локали, только быстрее и может работать с любым видом символов. diff --git a/src/sstring.cpp b/src/sstring.cpp index 102532a..feff50a 100644 --- a/src/sstring.cpp +++ b/src/sstring.cpp @@ -544,6 +544,7 @@ SIMSTR_API size_t unicode_traits::hashiu(const u32s* src, size_t l) { } return h; } + namespace { // Based on simdjson sources https://github.com/simdjson/simdjson/blob/667d0ed3c77f55cbda2082b034168d69898d1f88/include/simdjson/compile_time_json-inl.h#L189 @@ -1385,18 +1386,22 @@ SIMSTR_API std::optional impl_to_double(const K* start, const K* end) { return *pointer; }; const K* srcinit = start; - bool negative = false; - if (get_value(start) == '+') { - start++; - } else { - negative = (get_value(start) == '-'); + bool negative = (get_value(start) == '-'); + start += (uint8_t)negative; + if (end - start == 3) { + if (!negative && (start[0] | 0x20) == K('n')) { + if ((start[1] | 0x20) == K('a') && (start[2] | 0x20) == K('n')) { + return std::nan("0"); + } + } else if ((start[0] | 0x20) == K('i') && (start[1] | 0x20) == K('n') && (start[2] | 0x20) == K('f')) { + return negative ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + } } - start += uint8_t(negative); - uint64_t i = 0; + uint64_t digits = 0; const K* p = start; - p += parse_digit(get_value(p), i); - bool leading_zero = (i == 0); - while (parse_digit(get_value(p), i)) { + p += parse_digit(get_value(p), digits); + bool leading_zero = (digits == 0); + while (parse_digit(get_value(p), digits)) { p++; } if (p == start) { @@ -1411,11 +1416,11 @@ SIMSTR_API std::optional impl_to_double(const K* start, const K* end) { if (get_value(p) == '.') { p++; const K* start_decimal_digits = p; - if (!parse_digit(get_value(p), i)) { + if (!parse_digit(get_value(p), digits)) { return {}; } // no decimal digits p++; - while (parse_digit(get_value(p), i)) { + while (parse_digit(get_value(p), digits)) { p++; } exponent = -(p - start_decimal_digits); @@ -1448,11 +1453,11 @@ SIMSTR_API std::optional impl_to_double(const K* start, const K* end) { exponent += exp_neg ? 0 - exp : exp; } - if (exponent < smallest_power || exponent > largest_power) { + if (exponent < smallest_power || exponent > largest_power || p != end) { return {}; } double d; - if (!compute_float_64(exponent, i, negative, d)) { + if (!compute_float_64(exponent, digits, negative, d)) { return {}; } return d;