nfx-stringutils 0.3.0
Modern C++20 header-only library providing high-performance string utilities and zero-allocation splitting
Loading...
Searching...
No Matches
benchmark Directory Reference

Detailed Description

Benchmarks


Test Environment

Hardware Configuration

Component Specification
Computer Model Lenovo ThinkPad P15v Gen 3
CPU 12th Gen Intel Core i7-12800H (20 logical, 14 physical cores)
Base Clock 2.80 GHz
Turbo Clock 4.80 GHz
L1 Data Cache 48 KiB (×6 P-cores) + 32 KiB (×8 E-cores)
L1 Instruction Cache 32 KiB (×6 P-cores) + 64 KiB (×2 E-core clusters)
L2 Unified Cache 1.25 MiB (×6 P-cores) + 2 MiB (×2 E-core clusters)
L3 Unified Cache 24 MiB (×1 shared)
RAM DDR4-3200 (32GB)
GPU NVIDIA RTX A2000 4GB GDDR6

Software Configuration

Platform OS Benchmark Framework C++ Compiler nfx-stringutils Version
Linux LMDE 7 Google Benchmark v1.9.4 GCC 14.2.0-x64 v0.3.0
Linux LMDE 7 Google Benchmark v1.9.4 Clang 19.1.7-x64 v0.3.0
Windows Windows 10 Google Benchmark v1.9.4 MinGW GCC 14.2.0-x64 v0.3.0
Windows Windows 10 Google Benchmark v1.9.4 Clang-GNU-CLI 19.1.5-x64 v0.3.0
Windows Windows 10 Google Benchmark v1.9.4 Clang-MSVC-CLI 19.1.5-x64 v0.3.0
Windows Windows 10 Google Benchmark v1.9.4 MSVC 19.44.35217.0-x64 v0.3.0

Performance Results

BM_CharacterClassification.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
std::isspace 22.3 ns 23.5 ns 34.0 ns 19.4 ns 27.0 ns 30.0 ns
nfx::string::isWhitespace 6.64 ns 7.57 ns 9.96 ns 6.75 ns 9.5 ns 18.4 ns
std::isdigit 5.11 ns 5.19 ns 7.69 ns 4.74 ns 7 ns 32.8 ns
nfx::string::isDigit 4.97 ns 5.35 ns 7.91 ns 4.70 ns 6.67 ns 11.5 ns
std::isalpha 22.3 ns 28.2 ns 38.9 ns 19.8 ns 25.2 ns 30.8 ns
nfx::string::isAlpha 5.26 ns 5.22 ns 7.86 ns 5.03 ns 6.64 ns 21.4 ns

BM_NetworkValidation.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Manual isURIReserved 24.5 ns 14.4 ns 27.8 ns 14.1 ns 14.1 ns 49.5 ns
nfx::string::isURIReserved 17.6 ns 14.3 ns 34.2 ns 16.3 ns 13.9 ns 44.8 ns
Manual isURIUnreserved 19.3 ns 24.8 ns 30.2 ns 23.7 ns 23.9 ns 59.0 ns
nfx::string::isURIUnreserved 19.9 ns 24.7 ns 26.3 ns 24.0 ns 24.8 ns 50.6 ns

BM_NumericParsing.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
std::stoi 70.5 71.2 ns 473 ns 241 ns 224 ns 234 ns
std::from_chars (int) 31.9 ns 39.3 ns 34.4 ns 49.8 ns 44.9 ns 51.5 ns
nfx::string::fromString<int> 43.8 ns 31.8 ns 53.2 ns 49.7 ns 44.6 ns 88.8 ns
std::stod 257 ns 269 ns 2311 ns 660 ns 557 ns 544 ns
std::from_chars (double) 69.1 ns 68.5 ns 96.9 ns 381 ns 339 ns 401 ns
nfx::string::fromString<double> 72.2 ns 72.0 ns 98.1 ns 382 ns 327 ns 385 ns

BM_Splitter.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Manual CSV Splitting 19.5 ns 20.3 ns 37.7 ns 59.8 ns 45.5 ns 23.8 ns
Splitter CSV Splitting 22.7 ns 23.6 ns 40.3 ns 36.7 ns 34.6 ns 26.8 ns
SplitView CSV Splitting 22.7 ns 23.5 ns 36.7 ns 35.9 ns 34.8 ns 27.2 ns
Manual Path Splitting 18.9 ns 19.3 ns 27.9 ns 48.9 ns 40.7 ns 23.3 ns
Splitter Path Splitting 20.9 ns 21.9 ns 30.0 ns 32.1 ns 30.1 ns 25.8 ns
SplitView Path Splitting 21.1 ns 21.8 ns 29.7 ns 33.4 ns 30.1 ns 29.3 ns
Manual Config Splitting 15.3 ns 15.6 ns 35.1 ns 39.5 ns 34.9 ns 19.3 ns
Splitter Config Splitting 16.6 ns 17.2 ns 34.9 ns 27.8 ns 26.6 ns 21.4 ns
SplitView Config Splitting 16.6 ns 17.4 ns 34.4 ns 27.5 ns 26.4 ns 22.7 ns
Splitter Zero Allocation 21.9 ns 23.4 ns 31.2 ns 29.7 ns 32.2 ns 25.0 ns

BM_StringComparison.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
Manual compareIgnoreCase 70.3 ns 63.3 ns 58.2 ns 66.3 ns 64.7 ns 70.5 ns
nfx::string::equalsIgnoreCase 15.7 ns 16.8 ns 17.4 ns 16.6 ns 16.8 ns 25.1 ns
Manual compareIgnoreCase ordering 67.9 ns 69.9 ns 58.9 ns 67.3 ns 69.0 ns 78.7 ns
nfx::string::compareIgnoreCase 15.3 ns 17.0 ns 16.8 ns 16.7 ns 16.8 ns 24.9 ns
Lexicographic compare (baseline) 14.0 ns 13.3 ns 21.6 ns 21.8 ns 22.6 ns 24.9 ns
nfx::string::naturalCompare 34.9 ns 29.0 ns 38.2 ns 34.2 ns 31.3 ns 36.8 ns
Manual commonPrefix 12.8 ns 12.0 ns 11.8 ns 18.4 ns 11.6 ns 15.8 ns
nfx::string::commonPrefix 12.3 ns 16.3 ns 11.7 ns 16.5 ns 11.4 ns 19.8 ns
Manual commonSuffix 16.7 ns 15.4 ns 13.9 ns 14.3 ns 13.7 ns 19.6 ns
nfx::string::commonSuffix 12.5 ns 14.2 ns 14.0 ns 14.8ns 17.4 ns 18.1 ns

BM_StringOperations.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
std::starts_with 1.40 ns 1.38 ns 2.176 ns 0.695 ns 0.784 ns 2.65 ns
nfx::string::startsWith 0.558 ns 0.431 ns 0.584 ns 0.698 ns 0.703 ns 1.17 ns
std::ends_with 1.39 ns 1.41 ns 3.26 ns 0.518 ns 0.555 ns 3.95 ns
nfx::string::endsWith 0.324 ns 0.337 ns 0.348 ns 0.566 ns 0.575 ns 1.01 ns
std::contains 2.96 ns 5.67 ns 6.51 ns 10.0 ns 9.90 ns 10.4 ns
nfx::string::contains 1.67 ns 1.65 ns 3.73 ns 9.64 ns 9.99 ns 10.1 ns
Manual count (char) 6.23 ns 11.7 ns 6.81 ns 3.96 ns 3.97 ns 4.65 ns
nfx::string::count (char) 6.72 ns 11.7 ns 7.32 ns 12.3 ns 12.3 ns 15.2 ns
Manual count (substring) 3.00 ns 3.18 ns 14.5 ns 22.2 ns 23.6 ns 23.4 ns
nfx::string::count (sub) 3.01 ns 3.16 ns 14.9 ns 23.1 ns 24.1 ns 23.2 ns
Manual replaceAll 45.0 ns 46.5 ns 69.8 ns 76.5 ns 65.7 ns 71.0 ns
nfx::string::replaceAll 33.0 ns 46.3 ns 71.1 ns 88.9 ns 76.1 ns 69.2 ns
Manual join 50.4 ns 52.6 ns 104 ns 83.1 ns 83.0 ns 101 ns
nfx::string::join 40.9 ns 52.8 ns 89.9 ns 90.4 ns 90.9 ns 98.6 ns
std::find 2.93 ns 5.27 ns 5.84 ns 9.71 ns 9.94 ns 10.1 ns
nfx::string::indexOf 1.52 ns 1.71 ns 4.31 ns 9.91 ns 9.82 ns 10.1 ns
std::rfind 23.1 ns 22.7 ns 24.1 ns 10.9 ns 11.0 ns 11.9 ns
nfx::string::lastIndexOf 2.54 ns 3.13 ns 2.89 ns 11.0 ns 10.9 ns 12.2 ns

BM_StringTransform.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
nfx::string::trim 3.03 ns 3.03 ns 3.64 ns 3.32 ns 3.23 ns 3.47 ns
nfx::string::trimStart 1.53 ns 1.55 ns 1.88 ns 1.73 ns 1.72 ns 2.34 ns
nfx::string::trimEnd 1.77 ns 1.55 ns 1.98 ns 1.73 ns 1.73 ns 1.87 ns
Manual toLower 56.7 ns 57.2 ns 124 ns 103 ns 119 ns 109 ns
nfx::string::toLower 51.7 ns 58.9 ns 80.6 ns 95.5 ns 76.9 ns 93.3 ns
Manual toUpper 57.3 ns 57.6 ns 124 ns 127 ns 124 ns 119 ns
nfx::string::toUpper 47.8 ns 68.0 ns 76.7 ns 90.2 ns 77.9 ns 93.4 ns
nfx::string::substringBefore 1.90 ns 1.99 ns 4.90 ns 9.85 ns 9.78 ns 12.4 ns
nfx::string::substringAfter 1.87 ns 1.97 ns 4.91 ns 10.2 ns 9.91 ns 12.2 ns
nfx::string::substringBeforeLast 0.813 ns 1.03 ns 0.928 ns 4.15 ns 4.26 ns 5.99 ns
nfx::string::substringAfterLast 0.934 ns 1.01 ns 1.04 ns 4.41 ns 4.27 ns 6.22 ns

BM_StringValidation.cpp

Operation Linux GCC Linux Clang Windows MinGW GCC Windows Clang-GNU-CLI Windows Clang-MSVC-CLI Windows MSVC
std::string_view::empty 4.63 ns 6.06 ns 4.74 ns 6.24 ns 6.31 ns 24.4 ns
nfx::string::isEmpty 4.25 ns 6.12 ns 4.65 ns 6.19 ns 6.24 ns 24.5 ns
Manual isNullOrWhiteSpace 47.8 ns 40.7 ns 44.0 ns 37.7 ns 34.0 ns 68.0 ns
nfx::string::isNullOrWhiteSpace 12.5 ns 14.3 ns 15.0 ns 15.5 ns 17.4 ns 43.9 ns
Manual isAllDigits 20.1 ns 19.8 ns 21.7 ns 24.9 ns 24.3 ns 89.1 ns
nfx::string::isAllDigits 2.5 ns 19.6 ns 21.9 ns 24.4 ns 24.4 ns 45.3 ns

Benchmarks executed on November 30, 2025