Skip to content

Commit

Permalink
Link free nodes together
Browse files Browse the repository at this point in the history
This adds the index of the next free node into a newly freed node, or `capacity` if there are no more free indices.

This significantly speeds up finding the next free index, which is important for add+remove workloads.

Benchmarks
Old:
------------------------------------------------------------------
Benchmark                        Time             CPU   Iterations
------------------------------------------------------------------
r64InsertRemoveRandom/0        127 ns          127 ns      5461079
r64InsertRemoveRandom/1      31633 ns        31604 ns        24028
r64InsertRemoveRandom/2      30782 ns        30769 ns        21859
r64InsertRemoveRandom/3      31985 ns        31969 ns        21558
r64InsertRemoveRandom/4        356 ns          356 ns      1962694
r64InsertRemoveRandom/5      28972 ns        28962 ns        21366
r64InsertRemoveRandom/6      30632 ns        30623 ns        22682
r64InsertRemoveRandom/7        448 ns          448 ns      1601550
r64InsertRemoveRandom/8      32506 ns        32495 ns        21591
r64InsertRemoveRandom/9        689 ns          689 ns      1002237
cppInsertRemoveRandom/0        131 ns          131 ns      5319673
cppInsertRemoveRandom/1      16106 ns        16104 ns        43632
cppInsertRemoveRandom/2       3881 ns         3881 ns       180087
cppInsertRemoveRandom/3       3582 ns         3582 ns       171298
cppInsertRemoveRandom/4        403 ns          402 ns      1666697
cppInsertRemoveRandom/5        993 ns          993 ns       706038
cppInsertRemoveRandom/6       4039 ns         4038 ns       172421
cppInsertRemoveRandom/7        469 ns          469 ns      1440197
cppInsertRemoveRandom/8       1454 ns         1454 ns       633551
cppInsertRemoveRandom/9        654 ns          654 ns      1091588
setInsertRemoveRandom/0       1944 ns         1943 ns       368926
setInsertRemoveRandom/1       1955 ns         1953 ns       404931
setInsertRemoveRandom/2       1911 ns         1910 ns       358466
setInsertRemoveRandom/3       1953 ns         1951 ns       362351
setInsertRemoveRandom/4       2104 ns         2102 ns       321387
setInsertRemoveRandom/5       1944 ns         1943 ns       354836
setInsertRemoveRandom/6       1835 ns         1835 ns       359099
setInsertRemoveRandom/7       1970 ns         1968 ns       372625
setInsertRemoveRandom/8       1894 ns         1892 ns       355456
setInsertRemoveRandom/9       1659 ns         1659 ns       355902

New:
------------------------------------------------------------------
Benchmark                        Time             CPU   Iterations
------------------------------------------------------------------
r64InsertRemoveRandom/0        128 ns          128 ns      5614266
r64InsertRemoveRandom/1        935 ns          935 ns       739679
r64InsertRemoveRandom/2        916 ns          916 ns       739944
r64InsertRemoveRandom/3        936 ns          936 ns       690708
r64InsertRemoveRandom/4        368 ns          368 ns      1957642
r64InsertRemoveRandom/5       1141 ns         1140 ns       592505
r64InsertRemoveRandom/6       1139 ns         1138 ns       657840
r64InsertRemoveRandom/7        481 ns          481 ns      1434967
r64InsertRemoveRandom/8       1447 ns         1446 ns       484463
r64InsertRemoveRandom/9        721 ns          721 ns      1017456
cppInsertRemoveRandom/0        134 ns          134 ns      5524804
cppInsertRemoveRandom/1      15616 ns        15608 ns        47666
cppInsertRemoveRandom/2       3855 ns         3854 ns       180265
cppInsertRemoveRandom/3       3809 ns         3808 ns       183595
cppInsertRemoveRandom/4        412 ns          412 ns      1695708
cppInsertRemoveRandom/5       1012 ns         1011 ns       713501
cppInsertRemoveRandom/6       3410 ns         3409 ns       199214
cppInsertRemoveRandom/7        474 ns          474 ns      1496740
cppInsertRemoveRandom/8       1421 ns         1420 ns       465868
cppInsertRemoveRandom/9        564 ns          564 ns      1148076
setInsertRemoveRandom/0       1956 ns         1956 ns       351283
setInsertRemoveRandom/1       1959 ns         1958 ns       355766
setInsertRemoveRandom/2       1886 ns         1885 ns       357406
setInsertRemoveRandom/3       1905 ns         1904 ns       355235
setInsertRemoveRandom/4       1945 ns         1944 ns       364599
setInsertRemoveRandom/5       1902 ns         1902 ns       350312
setInsertRemoveRandom/6       1907 ns         1906 ns       346962
setInsertRemoveRandom/7       1937 ns         1936 ns       356168
setInsertRemoveRandom/8       1881 ns         1880 ns       341472
setInsertRemoveRandom/9       1962 ns         1961 ns       350643
  • Loading branch information
SLieve committed Jan 12, 2025
1 parent 9ae9221 commit 23a8441
Showing 1 changed file with 197 additions and 159 deletions.
Loading

0 comments on commit 23a8441

Please sign in to comment.