MCPcopy Create free account
hub / github.com/bloomberg/comdb2 / mmap_alloc

Function mmap_alloc

dlmalloc/dlmalloc.c:3205–3229  ·  view source on GitHub ↗

Malloc using mmap */

Source from the content-addressed store, hash-verified

3203
3204/* Malloc using mmap */
3205static void* mmap_alloc(mstate m, size_t nb) {
3206 size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
3207 if (mmsize > nb) { /* Check for wrap around 0 */
3208 char* mm = (char*)(DIRECT_MMAP(mmsize));
3209 if (mm != CMFAIL) {
3210 size_t offset = align_offset(chunk2mem(mm));
3211 size_t psize = mmsize - offset - MMAP_FOOT_PAD;
3212 mchunkptr p = (mchunkptr)(mm + offset);
3213 p->prev_foot = offset | IS_MMAPPED_BIT;
3214 (p)->head = (psize|CINUSE_BIT);
3215 mark_inuse_foot(m, p, psize);
3216 chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD;
3217 chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0;
3218
3219 if (mm < m->least_addr)
3220 m->least_addr = mm;
3221 if ((m->footprint += mmsize) > m->max_footprint)
3222 m->max_footprint = m->footprint;
3223 assert(is_aligned(chunk2mem(p)));
3224 check_mmapped_chunk(m, p);
3225 return chunk2mem(p);
3226 }
3227 }
3228 return 0;
3229}
3230
3231/* Realloc using mmap */
3232static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) {

Callers 1

sys_allocFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected