Issue 26341: Implement free-list for single-digit longs (original) (raw)

The attached patch implements a free-list for single-digit longs. We already have free lists for many fundamental types, such as floats & unicode.

The patch improves performance in micro-benchmarks by 10-20%. It'll also lessen memory fragmentation issues.

== Benchmarks ==

spectral_norm

Min: 0.268018 -> 0.245042: 1.09x faster Avg: 0.289548 -> 0.257861: 1.12x faster Significant (t=18.82) Stddev: 0.01004 -> 0.00640: 1.5680x smaller

-m timeit -s "loops=tuple(range(1000))" "for x in loops: x+x" with patch: 34.5 usec without patch: 45.9 usec

== Why only single-digit? ==

I've also a patch that implements free-lists for 1-digit, 2-digits and 3-digits longs, and collects statistics on them. It looks like we only want to optimize 1-digit longs:

===> d1_longs = 142384 124759 ===> d2_longs = 6872 6264 ===> d3_longs = 2907 2834