Hacker News new | ask | show | jobs
by mish15 2038 days ago
You can do this in pure Go though, you just need to manage the allocator yourself. That is a significant technical undertaking, but once done the advantages are huge. No GC overhead, no cgo. Done properly you can even have multiple readers and writers working concurrently in the same allocation space.
1 comments

OK you piqued my curiosity. How?
You just mmap memory as a slice. You can grow and shrink it, flush to disk if backed by a file, etc. In code it’s just a slice. Tough part is you need to allocate, control bounds, binary encode/decode, struct align, defrag, etc. It’s hard work, but the performance is 100% worth it if performance is your main goal.
TIL mmap'd memory is invisible to Go's GC
malloc isn't magic, just mmap some memory to dole out.