malloc的原理:
1.malloc开始搜索空闲空间,如果能找到一块合适的空间就分配出去
2.找不到就调用系统调用brk从堆区获取更多的空闲空间(以128为界限,brk或mmap)
3.调用brk后转入内核态,此时虚拟地址系统开始工作,扩大进程的堆区(并没有分配更多的物理内存)
4.brk完成之后返回到malloc,malloc找到合适的空间之后返回(内核态切换到用户态)
5.进程拿到资源,继续干活
6.当有代码读写新申请的内存内部出现缺页中断,此时由用户态切换到内核态,操作系统此时分配物理内存,再切换回去,程序继续。
空间配置器
STL-SGI使用两级空间配置器保证堆区资源的合理应用,超过128types的使用以及空间配置器,低于128字节的使用二级空间配置器,下面就是二级空间配置器的具体分配流程