Memory Allocator Design