熬之滴水成石:最想深入了解的内容--windows内核机制(17)

                                                      68-内存管理(6)

说说执行体的内存池的事吧!和前面提到的系统内存池一样,在执行体内也有内存池这样的模块。相比系统的内存池的管理粒度,执行体的粒度是很小的了。因为在这个层面,windows更需要实现灵活的、可适应各种大小的内存需求的内存池。执行体内存池的对象是由数据结构来描述,在这个数据结构中申明的变量都与执行体的对象有很大的关系。和系统内存池对象一样,执行体内存池的对象也分换页和非换页两种方式。也要进行相应的初始化工作,有相关的函数分别执行初始化相关的非换页内存池对象和换页内存池对象。在执行体有个叫initializepool的函数,该函数组成有些意思,在代码执行前段部分完成非换页内存池的初始化,在后半部分则完成换页内存池的初始化。其实这种方式正是一个合理的内存分配过程,先执行非换页的内存池申请,再执行换页内存池申请。执行体内的内存池管理算法主要分为2种,我所知道的是一种叫快查方法,原理则很简单主要是将空闲的内存链表记录这各种需要分配的内存,当内存池需要更多内存时,它可以向对应的系统内存池申请更多的一面,当内存释放时,让释放的内存的与相邻的尽量合并,以形成更多的内存块,前面所说内存管理大致都是类似的模式。这种快查表都是依附线程池对象生存的,这些表里通常都是8字节倍数大小的空闲链表。全局变量限定了内存分配的范围,如果内存分配超过了规定的大小,则在执行体内的内存池去找系统内存池去要内存。在执行体内最小的内存块为8个字节,快表就是保存着8、16、24直到4080大小的空闲内存块。如果用户要申请大于4080但小于4090的话,就可以直接使用整个页面。

                                                                                                                                                                                  未完待续...........

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值