TL;DR: This survey describes a variety of memory allocator designs and point out issues relevant to their design and evaluation, and chronologically survey most of the literature on allocators between 1961 and 1995.
Abstract: Dynamic memory allocation has been a fundamental part of most computer systems since roughly 1960, and memory allocation is widely considered to be either a solved problem or an insoluble one. In this survey, we describe a variety of memory allocator designs and point out issues relevant to their design and evaluation. We then chronologically survey most of the literature on allocators between 1961 and 1995. (Scores of papers are discussed, in varying detail, and over 150 references are given.)
TL;DR: This paper presents a comprehensive design overview of the SunOS 5.4 kernel memory allocator, based on a set of object-caching primitives that reduce the cost of allocating complex objects by retaining their state between uses.
Abstract: This paper presents a comprehensive design overview of the SunOS 5.4 kernel memory allocator. This allocator is based on a set of object-caching primitives that reduce the cost of allocating complex objects by retaining their state between uses. These same primitives prove equally effective for managing stateless memory (e.g. data pages and temporary buffers) because they are space-efficient and fast. The allocator's object caches respond dynamically to global memory pressure, and employ an object-coloring scheme that improves the system's overall cache utilization and bus balance. The allocator also has several statistical and debugging features that can detect a wide range of problems throughout the system.
TL;DR: In this paper, a method of managing the memory space of a data processing device includes defining a number of memory blocks in memory space and establishing a different maximum memory fragment size for each of the memory blocks.
Abstract: A method of managing the memory space of a data processing device includes defining a number of memory blocks in the memory space and establishing a different maximum memory fragment size for each of the memory blocks. When a memory allocation request is received, it is attempted to allocate the request in the memory block that has the smallest maximum fragment size that is not exceeded by the size of the allocation request. Consequently, smaller allocation requests tend to be loaded in the blocks with smaller maximum fragment sizes, while larger allocation requests are restricted to blocks with a sufficiently large maximum fragment size. The resulting segregation by size of memory fragments among blocks leads to more efficient use of the memory space. Memory fragments may also be segregated by size within a memory block. This is accomplished by establishing a fragment size dividing point for the memory block and then loading allocation requests that exceed the dividing point from the end of the block and loading smaller requests from the beginning of the block.
TL;DR: The new library Vmalloc generalizes malloc to give programmers more control over memory allocation and shows that Vm alloc is competitive to the best of these allocators.
Abstract: Despite its popularity, malloc's shortcomings frequently cause programmers to code around it. The new library Vmalloc generalizes malloc to give programmers more control over memory allocation. Vmalloc introduces the idea of organizing memory into separate regions, each with a discipline to get raw memory and a method to manage allocation. Applications can write their own disciplines to manipulate arbitrary type of memory or just to better organize memory in a region by creating new regions out of its memory. The provided set of allocation methods include general purpose allocation, fast special cases and aids for memory debugging or profiling. A compatible malloc interface enables current applications to select allocation methods using environment variables so they can tune for performance or perform other tasks such as profiling memory usage, generating traces of allocation calls or debugging memory errors. A performance study comparing Vmalloc and currently popular malloc implementations shows that Vmalloc is competitive to the best of these allocators. Applications can gain further performance improvement by using the right mixture of regions with different Vmalloc methods.
TL;DR: A new dynamic memory allocation algorithm, the Fibonacci system, is introduced which is similar to, but seems to have certain advantages over, the “buddy” system.
Abstract: A new dynamic memory allocation algorithm, the Fibonacci system, is introduced. This algorithm is similar to, but seems to have certain advantages over, the “buddy” system. A generalization is mentioned which includes both of these systems as special cases.