• R
    import mallocng · 503bd397
    Rich Felker 提交于
    the files added come from the mallocng development repo, commit
    2ed58817cca5bc055974e5a0e43c280d106e696b. they comprise a new malloc
    implementation, developed over the past 9 months, to replace the old
    allocator (since dubbed "oldmalloc") with one that retains low code
    size and minimal baseline memory overhead while avoiding fundamental
    flaws in oldmalloc and making significant enhancements. these include
    highly controlled fragmentation, fine-grained ability to return memory
    to the system when freed, and strong hardening against dynamic memory
    usage errors by the caller.
    
    internally, mallocng derives most of these properties from tightly
    structuring memory, creating space for allocations as uniform-sized
    slots within individually mmapped (and individually freeable)
    allocation groups. smaller-than-pagesize groups are created within
    slots of larger ones. minimal group size is very small, and larger
    sizes (in geometric progression) only come into play when usage is
    high.
    
    all data necessary for maintaining consistency of the allocator state
    is tracked in out-of-band metadata, reachable via a validated path
    from minimal in-band metadata. all pointers passed (to free, etc.) are
    validated before any stores to memory take place. early reuse of freed
    slots is avoided via approximate LRU order of freed slots. further
    hardening against use-after-free and double-free, even in the case
    where the freed slot has been reused, is made by cycling the offset
    within the slot at which the allocation is placed; this is possible
    whenever the slot size is larger than the requested allocation.
    503bd397
free.c 3.7 KB