old glibc (RHEL6) vs snprintf.c HEAD: Test case: %2$.*3$f %1$d snprintf time = 768.907 ms total, 0.000768907 ms per iteration pg_snprintf time = 1059.85 ms total, 0.00105985 ms per iteration ratio = 1.378 Test case: %.*g snprintf time = 782.535 ms total, 0.000782535 ms per iteration pg_snprintf time = 1061.71 ms total, 0.00106171 ms per iteration ratio = 1.357 Test case: %d %d snprintf time = 162.616 ms total, 0.000162616 ms per iteration pg_snprintf time = 135.103 ms total, 0.000135103 ms per iteration ratio = 0.831 Test case: %10d snprintf time = 143.027 ms total, 0.000143027 ms per iteration pg_snprintf time = 123.307 ms total, 0.000123307 ms per iteration ratio = 0.862 Test case: %s snprintf time = 306.78 ms total, 0.00030678 ms per iteration pg_snprintf time = 89.8803 ms total, 8.98803e-05 ms per iteration ratio = 0.293 Test case: %sx snprintf time = 310.329 ms total, 0.000310329 ms per iteration pg_snprintf time = 97.4798 ms total, 9.74798e-05 ms per iteration ratio = 0.314 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 155.288 ms total, 0.000155288 ms per iteration pg_snprintf time = 1393.57 ms total, 0.00139357 ms per iteration ratio = 8.974 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 238.737 ms total, 0.000238737 ms per iteration pg_snprintf time = 1407 ms total, 0.001407 ms per iteration ratio = 5.894 old glibc (RHEL6) vs snprintf.c v5 patch: Test case: %2$.*3$f %1$d snprintf time = 768.425 ms total, 0.000768425 ms per iteration pg_snprintf time = 895.599 ms total, 0.000895599 ms per iteration ratio = 1.165 Test case: %.*g snprintf time = 781.704 ms total, 0.000781704 ms per iteration pg_snprintf time = 854.84 ms total, 0.00085484 ms per iteration ratio = 1.094 Test case: %d %d snprintf time = 163.596 ms total, 0.000163596 ms per iteration pg_snprintf time = 134.837 ms total, 0.000134837 ms per iteration ratio = 0.824 Test case: %10d snprintf time = 143.684 ms total, 0.000143684 ms per iteration pg_snprintf time = 91.3437 ms total, 9.13437e-05 ms per iteration ratio = 0.636 Test case: %s snprintf time = 307.769 ms total, 0.000307769 ms per iteration pg_snprintf time = 70.5951 ms total, 7.05951e-05 ms per iteration ratio = 0.229 Test case: %sx snprintf time = 309.641 ms total, 0.000309641 ms per iteration pg_snprintf time = 85.2016 ms total, 8.52016e-05 ms per iteration ratio = 0.275 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 154.108 ms total, 0.000154108 ms per iteration pg_snprintf time = 126.425 ms total, 0.000126425 ms per iteration ratio = 0.820 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 239.205 ms total, 0.000239205 ms per iteration pg_snprintf time = 220.167 ms total, 0.000220167 ms per iteration ratio = 0.920 new glibc (Fedora 28) vs snprintf.c HEAD: Test case: %2$.*3$f %1$d snprintf time = 486.994 ms total, 0.000486994 ms per iteration pg_snprintf time = 579.769 ms total, 0.000579769 ms per iteration ratio = 1.191 Test case: %.*g snprintf time = 472.281 ms total, 0.000472281 ms per iteration pg_snprintf time = 640.499 ms total, 0.000640499 ms per iteration ratio = 1.356 Test case: %d %d snprintf time = 82.5786 ms total, 8.25786e-05 ms per iteration pg_snprintf time = 82.8582 ms total, 8.28582e-05 ms per iteration ratio = 1.003 Test case: %10d snprintf time = 76.3904 ms total, 7.63904e-05 ms per iteration pg_snprintf time = 68.9414 ms total, 6.89414e-05 ms per iteration ratio = 0.902 Test case: %s snprintf time = 7.80277 ms total, 7.80277e-06 ms per iteration pg_snprintf time = 38.8177 ms total, 3.88177e-05 ms per iteration ratio = 4.975 Test case: %sx snprintf time = 58.1852 ms total, 5.81852e-05 ms per iteration pg_snprintf time = 40.532 ms total, 4.0532e-05 ms per iteration ratio = 0.697 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 69.3546 ms total, 6.93546e-05 ms per iteration pg_snprintf time = 578.326 ms total, 0.000578326 ms per iteration ratio = 8.339 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 124.402 ms total, 0.000124402 ms per iteration pg_snprintf time = 589.417 ms total, 0.000589417 ms per iteration ratio = 4.738 new glibc (Fedora 28) vs snprintf.c v5 patch: Test case: %2$.*3$f %1$d snprintf time = 488.016 ms total, 0.000488016 ms per iteration pg_snprintf time = 486.862 ms total, 0.000486862 ms per iteration ratio = 0.998 Test case: %.*g snprintf time = 472.963 ms total, 0.000472963 ms per iteration pg_snprintf time = 514.987 ms total, 0.000514987 ms per iteration ratio = 1.089 Test case: %d %d snprintf time = 82.7157 ms total, 8.27157e-05 ms per iteration pg_snprintf time = 80.7262 ms total, 8.07262e-05 ms per iteration ratio = 0.976 Test case: %10d snprintf time = 77.337 ms total, 7.7337e-05 ms per iteration pg_snprintf time = 48.0275 ms total, 4.80275e-05 ms per iteration ratio = 0.621 Test case: %s snprintf time = 7.74283 ms total, 7.74283e-06 ms per iteration pg_snprintf time = 25.7698 ms total, 2.57698e-05 ms per iteration ratio = 3.328 Test case: %sx snprintf time = 59.1255 ms total, 5.91255e-05 ms per iteration pg_snprintf time = 30.5548 ms total, 3.05548e-05 ms per iteration ratio = 0.517 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 68.0464 ms total, 6.80464e-05 ms per iteration pg_snprintf time = 55.9024 ms total, 5.59024e-05 ms per iteration ratio = 0.822 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 124.641 ms total, 0.000124641 ms per iteration pg_snprintf time = 79.1252 ms total, 7.91252e-05 ms per iteration ratio = 0.635 FreeBSD 11.0 vs snprintf.c HEAD: Test case: %2$.*3$f %1$d snprintf time = 592.785 ms total, 0.000592785 ms per iteration pg_snprintf time = 604.65 ms total, 0.00060465 ms per iteration ratio = 1.020 Test case: %.*g snprintf time = 514.67 ms total, 0.00051467 ms per iteration pg_snprintf time = 822.477 ms total, 0.000822477 ms per iteration ratio = 1.598 Test case: %d %d snprintf time = 182.617 ms total, 0.000182617 ms per iteration pg_snprintf time = 81.1515 ms total, 8.11515e-05 ms per iteration ratio = 0.444 Test case: %10d snprintf time = 147.134 ms total, 0.000147134 ms per iteration pg_snprintf time = 60.1539 ms total, 6.01539e-05 ms per iteration ratio = 0.409 Test case: %s snprintf time = 130.103 ms total, 0.000130103 ms per iteration pg_snprintf time = 65.1186 ms total, 6.51186e-05 ms per iteration ratio = 0.501 Test case: %sx snprintf time = 161.099 ms total, 0.000161099 ms per iteration pg_snprintf time = 67.597 ms total, 6.7597e-05 ms per iteration ratio = 0.420 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 272.016 ms total, 0.000272016 ms per iteration pg_snprintf time = 576.049 ms total, 0.000576049 ms per iteration ratio = 2.118 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 377.863 ms total, 0.000377863 ms per iteration pg_snprintf time = 591.675 ms total, 0.000591675 ms per iteration ratio = 1.566 FreeBSD 11.0 vs snprintf.c v5 patch: Test case: %2$.*3$f %1$d snprintf time = 506.083 ms total, 0.000506083 ms per iteration pg_snprintf time = 406.696 ms total, 0.000406696 ms per iteration ratio = 0.804 Test case: %.*g snprintf time = 516.361 ms total, 0.000516361 ms per iteration pg_snprintf time = 583.85 ms total, 0.00058385 ms per iteration ratio = 1.131 Test case: %d %d snprintf time = 183.341 ms total, 0.000183341 ms per iteration pg_snprintf time = 115.537 ms total, 0.000115537 ms per iteration ratio = 0.630 Test case: %10d snprintf time = 148.071 ms total, 0.000148071 ms per iteration pg_snprintf time = 77.2526 ms total, 7.72526e-05 ms per iteration ratio = 0.522 Test case: %s snprintf time = 130.47 ms total, 0.00013047 ms per iteration pg_snprintf time = 63.1665 ms total, 6.31665e-05 ms per iteration ratio = 0.484 Test case: %sx snprintf time = 161.038 ms total, 0.000161038 ms per iteration pg_snprintf time = 66.365 ms total, 6.6365e-05 ms per iteration ratio = 0.412 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 275.3 ms total, 0.0002753 ms per iteration pg_snprintf time = 169.824 ms total, 0.000169824 ms per iteration ratio = 0.617 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 377.169 ms total, 0.000377169 ms per iteration pg_snprintf time = 324.277 ms total, 0.000324277 ms per iteration ratio = 0.860 OpenBSD 6.0 vs snprintf.c HEAD: Test case: %2$.*3$f %1$d snprintf time = 366.693 ms total, 0.000366693 ms per iteration pg_snprintf time = 575.859 ms total, 0.000575859 ms per iteration ratio = 1.570 Test case: %.*g snprintf time = 487.42 ms total, 0.00048742 ms per iteration pg_snprintf time = 783.286 ms total, 0.000783286 ms per iteration ratio = 1.607 Test case: %d %d snprintf time = 175.423 ms total, 0.000175423 ms per iteration pg_snprintf time = 95.583 ms total, 9.5583e-05 ms per iteration ratio = 0.545 Test case: %10d snprintf time = 145.509 ms total, 0.000145509 ms per iteration pg_snprintf time = 80.7363 ms total, 8.07363e-05 ms per iteration ratio = 0.555 Test case: %s snprintf time = 160.49 ms total, 0.00016049 ms per iteration pg_snprintf time = 69.3179 ms total, 6.93179e-05 ms per iteration ratio = 0.432 Test case: %sx snprintf time = 179.017 ms total, 0.000179017 ms per iteration pg_snprintf time = 72.7243 ms total, 7.27243e-05 ms per iteration ratio = 0.406 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 893.578 ms total, 0.000893578 ms per iteration pg_snprintf time = 721.957 ms total, 0.000721957 ms per iteration ratio = 0.808 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 1696.39 ms total, 0.00169639 ms per iteration pg_snprintf time = 731.144 ms total, 0.000731144 ms per iteration ratio = 0.431 OpenBSD 6.0 vs snprintf.c v5 patch: Test case: %2$.*3$f %1$d snprintf time = 368.158 ms total, 0.000368158 ms per iteration pg_snprintf time = 408.526 ms total, 0.000408526 ms per iteration ratio = 1.110 Test case: %.*g snprintf time = 486.741 ms total, 0.000486741 ms per iteration pg_snprintf time = 548.396 ms total, 0.000548396 ms per iteration ratio = 1.127 Test case: %d %d snprintf time = 175.101 ms total, 0.000175101 ms per iteration pg_snprintf time = 123.1 ms total, 0.0001231 ms per iteration ratio = 0.703 Test case: %10d snprintf time = 145.661 ms total, 0.000145661 ms per iteration pg_snprintf time = 82.1964 ms total, 8.21964e-05 ms per iteration ratio = 0.564 Test case: %s snprintf time = 160.213 ms total, 0.000160213 ms per iteration pg_snprintf time = 62.7285 ms total, 6.27285e-05 ms per iteration ratio = 0.392 Test case: %sx snprintf time = 178.462 ms total, 0.000178462 ms per iteration pg_snprintf time = 66.0236 ms total, 6.60236e-05 ms per iteration ratio = 0.370 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 892.687 ms total, 0.000892687 ms per iteration pg_snprintf time = 183.339 ms total, 0.000183339 ms per iteration ratio = 0.205 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 1672.81 ms total, 0.00167281 ms per iteration pg_snprintf time = 218.761 ms total, 0.000218761 ms per iteration ratio = 0.131 macOS Mojave vs snprintf.c HEAD: Test case: %2$.*3$f %1$d snprintf time = 215.462 ms total, 0.000215462 ms per iteration pg_snprintf time = 301.006 ms total, 0.000301006 ms per iteration ratio = 1.397 Test case: %.*g snprintf time = 329.865 ms total, 0.000329865 ms per iteration pg_snprintf time = 501.367 ms total, 0.000501367 ms per iteration ratio = 1.520 Test case: %d %d snprintf time = 83.8561 ms total, 8.38561e-05 ms per iteration pg_snprintf time = 65.7689 ms total, 6.57689e-05 ms per iteration ratio = 0.784 Test case: %10d snprintf time = 65.5346 ms total, 6.55346e-05 ms per iteration pg_snprintf time = 59.9587 ms total, 5.99587e-05 ms per iteration ratio = 0.915 Test case: %s snprintf time = 67.0085 ms total, 6.70085e-05 ms per iteration pg_snprintf time = 32.315 ms total, 3.2315e-05 ms per iteration ratio = 0.482 Test case: %sx snprintf time = 78.1157 ms total, 7.81157e-05 ms per iteration pg_snprintf time = 32.7136 ms total, 3.27136e-05 ms per iteration ratio = 0.419 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 172.349 ms total, 0.000172349 ms per iteration pg_snprintf time = 412.957 ms total, 0.000412957 ms per iteration ratio = 2.396 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 303.392 ms total, 0.000303392 ms per iteration pg_snprintf time = 427.246 ms total, 0.000427246 ms per iteration ratio = 1.408 macOS Mojave vs snprintf.c v5 patch: Test case: %2$.*3$f %1$d snprintf time = 212.13 ms total, 0.00021213 ms per iteration pg_snprintf time = 244.277 ms total, 0.000244277 ms per iteration ratio = 1.152 Test case: %.*g snprintf time = 337.137 ms total, 0.000337137 ms per iteration pg_snprintf time = 371.386 ms total, 0.000371386 ms per iteration ratio = 1.102 Test case: %d %d snprintf time = 80.876 ms total, 8.0876e-05 ms per iteration pg_snprintf time = 64.8164 ms total, 6.48164e-05 ms per iteration ratio = 0.801 Test case: %10d snprintf time = 60.1313 ms total, 6.01313e-05 ms per iteration pg_snprintf time = 40.7794 ms total, 4.07794e-05 ms per iteration ratio = 0.678 Test case: %s snprintf time = 61.55 ms total, 6.155e-05 ms per iteration pg_snprintf time = 24.1078 ms total, 2.41078e-05 ms per iteration ratio = 0.392 Test case: %sx snprintf time = 71.2324 ms total, 7.12324e-05 ms per iteration pg_snprintf time = 35.2292 ms total, 3.52292e-05 ms per iteration ratio = 0.495 Test case: %d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 149.266 ms total, 0.000149266 ms per iteration pg_snprintf time = 101.321 ms total, 0.000101321 ms per iteration ratio = 0.679 Test case: %1$d 0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 snprintf time = 306.861 ms total, 0.000306861 ms per iteration pg_snprintf time = 122.933 ms total, 0.000122933 ms per iteration ratio = 0.401