C++学习笔记七——内存管理机制

博文地址:http://blog.csdn.net/u01340105

Windows内存管理器

工作集(WorkingSet):进程虚拟空间中实际被映射到物理内存页面的那部分被称为工作集;
当进程想访问多余实际物理内存的内存时,系统会启用虚拟内存管理机制(工作集管理),将那些长时间未访问的物理页面复制到硬盘缓冲文件上,并释放这些物理页面,映射到虚拟空间的其它页面上;
注:来回映射折腾没有直接调用内存来的快,解释了为什么增加内存条可以提高运行速度。
内存管理器由下列组件构成(分别运行于独立的线程):

1、工作集管理器(优先级16);
2、进程/栈交换器(优先级23);
3、已修改页面写出器(优先级17);
4、映射页面写出器(优先级17);
5、解引用段线程(优先级18);
6、零页面线程(优先级0);

1、工作集管理器

 工作集管理器被一个称作“平衡集管理器”(名为KeBahnceSetManager)的系统线程环境调用
 平衡集管理器(内核线程之一)至少每秒调用工作集管理器一次,若系统空闲内存数量过低(低于某个阀值时)也会调用工作集管理器;
 工作集管理器总控内存管理策略,比如:工作集修剪、页面年龄(aging)、以及写出已修改页面 等;
 在Windows 2000以上系统中工作集分为3类:进程工作集、系统工作集、会话工作集;

2、进程/栈交换器

v执行进程栈和内核线程栈环境(CONTEXT)的交换工作(线程调度)。
注:内核线程栈环境其实就是寄存器状态,交换就是状态的切换。不同的应用对应不同的状态(其实就是寄存器里的值),当前应用变化时,将当前状态保存下来,加载新的状态。举个例子就是现在运行着一个浏览器,但现在我需要看个word文档,我点开word文档时就调用交换器。
v当需要进行栈环境交换时,平衡集管理器就唤醒(Resume)此线程。

3、已修改页面写出器

v将物理内存中的已被修改过的页面写回硬盘上的页面文件中。
v当已修改页面列表中的页面数量超过某一阀值时,此线程被唤醒。
注:保持内存和硬盘文件的一致性。

4、映射页面写出器

v将内存映射文件中的已修改页面写回到磁盘对应的文件上。
v当修改列表中页面数量大于某个阀值或者修改列表上的页面持续5分钟以上未写回磁盘时,该线程被唤醒执行。
注:将内存(自己创建的虚拟内存)中数据及时保存到永久存储单元,防止意外(如突然掉电等)发送,当前数据丢失。可以使用此功能进行数据备份!

5、解引用段线程

v负责页面缓存的回收,以及管理页面文件的增长和缩减。
v当可用的映射物理内存变少时,该线程被唤醒释放一些页面缓存用于映射。
注:释放内存。(页面年龄过大等会将缓存内容写到相应映射文件,并释放次块内存)

6、零页面线程

v将空闲的页面清成0,用于下一次使用。
注:有两个重要作用!
1,加快程序运行。省去了程序应用这块内存时初始化过程。
2,保护数据。此块内存地址数据映射到硬盘后,原地址仍有使用时的数据,清0可防止恶意访问丢失信息。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值