brk和mmap(转)

进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap:
1.brk是将数据段的(.data)的最高地址指针_edata往高地址推
2.mmap是虚拟地址空间找一个空闲的虚拟内存


如果malloc < 128K,那么会用brk进行分配,推动指针。


实际上并没有建立映射关系,只有当第一次读写数据的时候,才会引起缺页中断,分配相应的内存


否则会直接使用mmap系统调用

主要是因为内存需要等到高地址释放后才能释放(A必需在B之后进行释放。因此产生内存碎片)。而mmap直接释放


brk和sbrk的结合使用:

int* p = sbrk(0);
brk(p+100);

http://m.blog.csdn.net/article/details?id=39496057

原文地址:https://www.cnblogs.com/Przz/p/6877718.html