lol_alloc
A laughably simple wasm global_allocator.
Like wee_alloc, but smaller since I used skinnier letters in the name.
lol_alloc is a experimental wasm global_allocator.
I'm writing lol_alloc to learn about allocators (I havent written one before) and because wee_alloc seems unmaintained and has a leak.
After looking at wee_alloc's implementation (which I faield to understand or fix), I wanted to find out how hard it really is to make a wasm global_allocator, and it seems like providing one could be useful to the rust wasm community.
Plan
I'd like to offer a few minimal allocator implementations targeted specifically as WebAssembly optimized for code size for various levels of requirements.
Status
Current a few allocators are provided with minimal testing.
Currently none are concurrency safe.
Sizes of allocators include overhead from example:
FailAllocator: 195 bytes: errors on allocations. Operations are O(1),LeakingPageAllocator: 230 bytes: Allocates pages for each allocation. Operations are O(1).LeakingAllocator: 356 bytes: Bump pointer allocator, growing the heap as needed. Operations are O(1).FreeListAllocator: 656 bytes: Free list based allocator. Operations are O(size of free list).
Testing
There are some normal rust unit tests (run with cargo run test),
which use a test implementation of MemoryGrower.
There are also some wasm-pack tests (run with wasm-pack test --node lol_alloc)
Size testing:
wasm-pack build --release example && ls -l example/pkg/lol_alloc_example_bg.wasm