1. 30 6月, 2020 1 次提交
    • 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