From the glib v2.15+ code:
malloc/malloc.c
/* A contiguous main_arena is consistent with sbrk_base. */ if (av == &main_arena && contiguous(av)) assert((char*)mp_.sbrk_base + av->system_mem == (char*)av->top + chunksize(av->top));
You can gdb to a process and try to verify. You'll need to have the libc6-dev and libc6-dbg packages to get the correct debugging symbols for libc:
(gdb) print (char *)main_arena->top + (main_arena->top->size & ~(0x4 | 0x2 | 0x1)) $1 = 0xc17000 (gdb) print (char *)mp_.sbrk_base + main_arena->system_mem $2 = 0xc17000
Therefore, the sbrk_base does not really applied for other heap arenas (see http://siddhesh.in/journal/2012/10/24/malloc-per-thread-arenas-in-glibc/ for more context)
No comments:
Post a Comment