SkillAgentSearch skills...

Freelist

Pure Go generic implementation of freelist allocator

Install / Use

/learn @Snawoot/Freelist
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

freelist

Go Reference

Pure Go generic implementation of freelist allocator.

It allows faster allocation and reuse of small objects, making some implementations of datastructures (linked lists, trees, ...) significantly more efficient.

Key features:

  • Unlike many other implementations, it doesn't ruin garbage collection for pointers inside allocated objects and plays nicely with garbage collector.
  • Unlike many other implementations, it doesn't depend on CGO and doesn't encumber builds.

Usage

See godoc examples.

Benchmarks

Here is benchmarks of original container/list.List (BenchmarkContainerList.*) versus the same List, but augmented by this freelist package (BenchmarkFreelistList.*).

goos: linux
goarch: amd64
pkg: github.com/Snawoot/freelist
cpu: Intel(R) N100
BenchmarkContainerList/PushFront-4                     	10498634	        138.6 ns/op	      55 B/op	       1 allocs/op
BenchmarkContainerList/PushPopFront-4                  	 9171722	        173.3 ns/op	      55 B/op	       1 allocs/op
BenchmarkContainerList/PushPopFrontImmediate-4         	14392966	        97.04 ns/op	      56 B/op	       1 allocs/op
BenchmarkFreelistList/PushFront-4                      	13464580	        89.79 ns/op	      56 B/op	       1 allocs/op
BenchmarkFreelistList/PushPopFront-4                   	12886014	        82.59 ns/op	      56 B/op	       1 allocs/op
BenchmarkFreelistList/PushPopFrontImmediate-4          	30983012	        38.41 ns/op	       8 B/op	       0 allocs/op
BenchmarkFreelistList/WarmedUpPushFront-4              	36359986	        32.00 ns/op	       7 B/op	       0 allocs/op
BenchmarkFreelistList/WarmedUpPushPopFront-4           	31587457	        38.25 ns/op	       7 B/op	       0 allocs/op
BenchmarkBuiltinNew-4                                  	48650766	        27.10 ns/op	       8 B/op	       1 allocs/op
BenchmarkFreelistAlloc-4                               	68139662	        16.94 ns/op	      18 B/op	       0 allocs/op
BenchmarkWarmedUpFreelistAlloc-4                       	224581018	        5.377 ns/op	       0 B/op	       0 allocs/op
PASS
ok  	github.com/Snawoot/freelist	28.662s

As you can see it performs about twice faster than original container/list.List in worst case and performs 3-5 times faster once freelist reaches right size.

View on GitHub
GitHub Stars12
CategoryDevelopment
Updated5mo ago
Forks1

Languages

Go

Security Score

92/100

Audited on Oct 15, 2025

No findings