Starting to learn about and applying more advanced Rust patterns I discovered arenas, specialized memory allocators that allow you to batch deallocation of objects with similar lifetimes.
One issue however I've been encountering using popular arena creates like bumpalo is the fact that if you're not careful it's quite easy to leak memory with these libraries.
This is because a big part of the savings when it comes to using arenas is the idea that you don't need to individually drop
objects anymore, the arena drops everything at once without running each object's drop
implementation.
This is a problem for types like Vec
, String
, etc. that manage their own heap allocation. Skipping drop
leaks memory.
However if there was some trait like HandlesOwnHeap
or RequiresDrop
for Vec
then e.g. bumpalo
's Bump
arena could have a trait bound on its alloc
method that prevents you from accidentally using it with such a struct.
4 posts - 3 participants