购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1.5 虚拟内存到物理内存

调用malloc函数只会申请一个虚拟内存空间,这个虚拟内存空间中没有任何数据,也不会占用真正的物理内存,只有当我们往这块虚拟内存中写入数据时,才会消耗物理内存的空间。大家可以通过下面的代码了解申请内存、写入数据、释放内存的整个流程。

当我们往申请的内存空间中写入数据时,流程如下:

1) 触发缺页中断 :当往指定的内存地址中写入数据时,如果此时该地址的页没有映射到物理内存页,就会触发缺页中断(Page Fault),操作系统接着会捕捉到这个中断异常。

2) 分配物理内存 :当操作系统捕捉到中断异常后,首先检查访问的虚拟内存页是否合法,即是否在进程的地址空间范围内。如果是合法的,操作系统就会为该虚拟内存页分配一个物理内存页。如果物理内存已经满了,操作系统可能会触发页面置换算法,将某些不常用的物理内存页换到磁盘上,从而腾出空间来分配新的物理内存页。

3) 更新页表 :一旦物理内存页被分配,操作系统就会更新该进程的页表,将该进程中的虚拟内存页与新分配的物理内存页进行映射。

4) 写入数据 :操作系统完成页表更新后,程序会继续执行,此时上面的代码就可以继续完成数据的写入操作了。 uZZvWN9Vwb0ao3qHJe8yoAkgCPGttRVP3qT26UB8jIprsdkTjA9S3mzH1ewvK23u

点击中间区域
呼出菜单
上一章
目录
下一章
×