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.
I'd like to offer a few minimal allocator implementations targeted specifically as WebAssembly optimized for code size for various levels of requirements.
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).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