The specified section is simply not declared as a heap because it is allocated through mmap() calls.
Here, on my 64-bit system, the allocated memory comes from this ever-growing section:
7f7fbda7a000-7f7fbdc7c000 rw-p 00000000 00:00 0 ... 7f7fbc868000-7f7fbdc7c000 rw-p 00000000 00:00 0 ... 7f7fbc363000-7f7fbdc7c000 rw-p 00000000 00:00 0
The partition expands at the beginning, and the newly allocated memory always has a starting address + 0x10.
What allocates a memory allocator
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7fbb353000
Strange thing; I would suggest that each section of mmap() ed memory is shown separately. But if I have a program that makes intermediate calls to free() , memory allocation follows this:
7f16be944000-7f16bec47000 rw-p 00000000 00:00 0 7f16bed48000-7f16bee49000 rw-p 00000000 00:00 0
There was a hole in the continuous memory.
And one more thing: in this modified program there really is a [heap] section. Due to new features, outside of my understanding, the program moves to distribution via brk() , and this is (possibly) where the heap comes from:
with each call to brk() , the corresponding section expands at the end:
01183000-029a4000 rw-p 00000000 00:00 0 [heap]
I do not know what malloc() has changed the mind to take the βrealβ heap (material related to brk() ) for distributions. The first munmap() call associated with the corresponding free() seems to create this.
According to this , for mmap() ed chunks seems to be the maximum. If this is exceeded, gnulibc returns to brk() / sbrk() , which works in the "normal heap area".
So, the answer is shorter: the malloc() memory taken from brk() is located in the "real" [heap] section, the mmap() ed memory sections are not marked as [heap] .