C++底层技术---操作系统的内存管理

来源:互联网 发布:java jdbc delete 编辑:程序博客网 时间:2024/05/22 14:23

操作系统的内存管理有几个原则

1.进程私有

2.基于页

3.4GB大小


操作系统分配主要有2个步骤

1.预留

2.提交

进程的虚拟地址空间的页有三种状态:自由,预留,和提交


预留的作用是针对频繁请求内存代码的,导致申请的地址空间不连续而增加的。一般的过程是自由---》预留------》提交

预留只是从地址空间划分一部分给程序,而得到真正的物理存储空间是在提交阶段


虚拟地址到物理地址的映射:

1.每一个进程都维护自己的层次结构来实现其地址的映射,第一层是目录页,第二层是叶表。有目录页找到叶表,找到叶表后就去找地址在此页的位置

例如一个0X2A8E31F7的指针,可以这样找到他实际的物理地址

16进制化为2进制,前10位找到页表;在10位叶表找到页,后12位为指针指向此页的位置。

2.对于每一个进程的都有自己一个AVD集合,当程序申请一块新的内存,字只需要访问VAD树。

VAD是一个平衡二叉树,申请地址在二VAD大小之内即可申请。

进程首先会根据页目录访问页表项,如果页表为空,那么会查找VAD树,然后生成相应的叶表项,程序的叶表项是在第一次访问提交页时获得的。

若果VAD显示该地址不存在或者是预留择抛出异常


3.堆

分配小块的内存就用堆,堆不用思考叶表,边界但是速度慢。

进程都有默认的堆,1M


0 0
原创粉丝点击