peterYong,内存管理

从操作系统内存管理来说 , malloc申请一块内存的背后原理是什么?

peterYong,内存管理


【peterYong,内存管理】内存的一部分空间被用来保存页表 , 哪个页被使用了 , 哪个页空着 , 哪个页分给了哪个进程 , 内存管理单元mmu都会在页表里做记录 。以4k为一页 , 意味着页地址数只是物理地址的4096分之一 , 各种查询法速度都够用了 。程序内的地址是一个虚拟的连续地址 , 程序对虚拟地址的读写由mmu转换为对物理地址的读写 。操作系统在帮助程序初始化 , 分配了默认数量的页以后 , 就任凭程序折腾了 。
你用标准malloc函数管理也好 , 自己写个替代品也好 , 只要虚拟地址对应的物理地址已经分配给程序 , 都不需要操作系统插手 。一旦程序读写的虚拟地址没有对应的物理地址 , mmu会抛出异常信号 , 暂停程序的运行 , 然后操作系统会填写页表 , 分配一个新的页面给程序 , 对于用户程序来说是感受不到这个过程的 。操作系统就好比一个坐拥半城的渣男 , 对每个女友(程序)都承诺全部的房产 , 然而实际只给一个小房子供程序使用管理(malloc) 。

    推荐阅读