malloc: brk, mmap
发布时间
阅读量:
阅读量
此处展示一幅虚拟地址空间分布示意图(图源:《深入理解计算机系统》第三版)。

malloc在内存分配过程中涉及两个系统调用接口,分别是brk和mmap。其中,brk机制通过将.data段的最高地址指针_edata向高地址方向移动来实现内存扩展,而mmap则是在进程的虚拟地址空间中,即位于堆与栈之间的内存映射区域,寻找一块可用区域进行分配。这两种方式均不会立即分配物理内存,只有在实际访问对应的内存地址时才会触发缺页中断,并在此时完成物理内存的分配。 http://blog.yufeng.info/archives/tag/mmap上提到了通过MAP_POPULATE来实现mmap函数直接预分配物理内存的方法,这个就不展开说了。
通常情况下,在调用malloc函数进行内存申请时,若请求的大小小于128KB,则系统会采用brk方式进行分配;而当请求的大小超过128KB时,则会选择mmap机制,在堆与栈之间的空闲区域中寻找合适位置进行分配。下面通过一个示例来具体说明这一过程:
#include <stdio.h>
#include <malloc.h>
int m
全部评论 (0)
还没有任何评论哟~
