| |
1 通过malloc申请的内存并不一定代表实际已经得到的物理内存,而只是改变了用户空间heap空间的大小。
2 系统调用sbrk和brk仅仅只能做的事情是,移动堆的最大线性地址(top memory),它并不能处理中间的空闲空间
glibc的malloc函数是这样处理用户的空间请求的:对于小于128kb的请求来说,它会在现有的堆空间里面按照堆分配算法分配一块空间并返回;对于大于128kb的请求来说,
它会使用mmap函数为它分配一块匿名空间,然后在这个匿名空间中为用户分配空间。对于最简单的malloc函数,可以使用mmap实现。
|