static void * chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero, bool *commit) { void *ret; size_t alloc_size; alloc_size = size + alignment - PAGE; /* Beware size_t wrap-around. */ if (alloc_size < size) return (NULL); do { void *pages; size_t leadsize; pages = pages_map(NULL, alloc_size, commit); if (pages == NULL) return (NULL); leadsize = ALIGNMENT_CEILING((vaddr_t)pages, alignment) - (vaddr_t)pages; ret = pages_trim(pages, alloc_size, leadsize, size, commit); } while (ret == NULL); assert(ret != NULL); *zero = true; return (ret); }
static void * chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero #ifdef JEMALLOC_ENABLE_MEMKIND , unsigned partition #endif ) { void *ret, *pages; size_t alloc_size, leadsize; alloc_size = size + alignment - PAGE; /* Beware size_t wrap-around. */ if (alloc_size < size) return (NULL); do { pages = pages_map(NULL, alloc_size #ifdef JEMALLOC_ENABLE_MEMKIND , partition #endif ); if (pages == NULL) return (NULL); leadsize = ALIGNMENT_CEILING((uintptr_t)pages, alignment) - (uintptr_t)pages; ret = pages_trim(pages, alloc_size, leadsize, size #ifdef JEMALLOC_ENABLE_MEMKIND , partition #endif ); } while (ret == NULL); assert(ret != NULL); *zero = true; return (ret); }