Dynamic memory allocator Can be used as a replacement of malloc with a O(1) allocation time