algorithmic efficiency buddy memory allocation computer program computer science digital object identifier donald knuth embedded system free list hazard pointer heap overflow hoard memory allocator linked list malloc memory pool mmap obstack power of two runtime slab allocation stack-based memory allocation static memory allocation structured programming