• R
    switch to a common calloc implementation · 28f64fa6
    Rich Felker 提交于
    abstractly, calloc is completely malloc-implementation-independent;
    it's malloc followed by memset, or as we do it, a "conditional memset"
    that avoids touching fresh zero pages.
    
    previously, calloc was kept separate for the bump allocator, which can
    always skip memset, and the version of calloc provided with the full
    malloc conditionally skipped the clearing for large direct-mmapped
    allocations. the latter is a moderately attractive optimization, and
    can be added back if needed. however, further consideration to make it
    correct under malloc replacement would be needed.
    
    commit b4b1e103 documented the
    contract for malloc replacement as allowing omission of calloc, and
    indeed that worked for dynamic linking, but for static linking it was
    possible to get the non-clearing definition from the bump allocator;
    if not for that, it would have been a link error trying to pull in
    malloc.o.
    
    the conditional-clearing code for the new common calloc is taken from
    mal0_clear in oldmalloc, but drops the need to access actual page size
    and just uses a fixed value of 4096. this avoids potentially needing
    access to global data for the sake of an optimization that at best
    marginally helps archs with offensively-large page sizes.
    28f64fa6
lite_malloc.c 2.2 KB