一、sbrk/brk实现
(1)其实brk和sbrk是通过指针来实现的,这种实现方式是在用户申请相对而言比较小的内存时用到的
申请: 假如现在用户想申请8个字节的空间,那么系统就会一次性给用户空间分配128k(其实是132k,但是这个值也不是固定的,如果你申请的稍微较大的时候,内核会给你再分配比这大的空间的,所以说内核要根据用户申请的具体情况来定,这个值并不唯一)个大小的空间,这些空间申请来先是存在C库中的,它并不是说就全部都给你了,它只是把你需要的那部分划分给你,剩下的在C库中保存,等到你下次再申请的时候(相对较小的)就不用再到内核空间中申请了,直接C库给你分配就行,也提高了效率
(这只是4G空间中,堆区的那部分呢空间图)当每次申请的时候,brk就会向上移动,如果它下面有内存被free了,那也是不能被释放的,因为brk是不能够回退的,因为它指向的那块空间可能还在被用
释放:当用户在free的时候,其实并没有还给内核空间,而是还在用户空间中,C库中会把每次释放的再继续合并在一起,当下次用户再来申请的时候如果之前剩余的不够还可以从这些拼接的空间中取。
二、Mmap映射
这是当用户一次要申请很大空间的时候(比如1M&#