问题
I understand that in Linux the mm_struct
describes the memory layout of a process. I also understand that the start_brk
and brk
mark the start and end of the heap section of a process respectively.
Now, this is my problem: I have a process, for which I wrote the source code, that allocates 5.25 GB of heap memory using malloc
. However, when I examine the process's mm_sruct
using a kernel module I find the value of is equal to 135168. And this is different from what I expected: I expected brk - start_brk
to be equal slight above 5.25 GB.
So, what is going on here?
Thanks.
回答1:
I notice the following in the manpage for malloc(3):
Normally, malloc() allocates memory from the heap, and adjusts the size of the heap as required, using sbrk(2). When allocating blocks of memory larger than MMAP_THRESHOLD bytes, the glibc malloc() implementation allocates the memory as a private anonymous mapping using mmap(2). MMAP_THRESHOLD is 128 kB by default, but is adjustable using mallopt(3). Allocations performed using mmap(2) are unaffected by the RLIMIT_DATA resource limit (see getrlimit(2)).
So it sounds like mmap
is used instead of the heap.
来源:https://stackoverflow.com/questions/26642811/where-is-the-heap