位图内存管理:   

  每块内存用一个二进制位表示它的使用状态,如果该块内存被占用,则把对应位图中的对应位置1,如果空闲则置0,原理十分简单。计算机里面处理的位数最少的变量是字节(byte),所以也就是8位做为一个整体来对待,8位表示的整数是从0到255。

  fastdb中database的allocate实现定义了如下几个数组。

static byte const firstHoleSize [] = {
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
};
static byte const lastHoleSize [] = {
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
};
static byte const maxHoleSize [] = {
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
};
static byte const maxHoleOffset [] = {
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
};

  firstHoleSize[],lastHoleSize[],maxHoleSize[],maxHoleOffset[]四个固定的数组,每个数组都有256个元素,对应从0到255的整数。输入数组的下标获得二进制内存代表的页面被占用情况。firstHoleSize数组表示从右向左数该数值的“洞”的个数,遇到占用结束计数;lastHoleSize数组表示从左向右数该数值的“洞”的个数,遇到占用结束计数。

举例来说: 二进制内存B00001010代表十进制的10,内存占用如下:

firstHoleSize[]表示上面内存占用中,从右到左未被占用的页面有多少个。如上图所示,只要内存末位为是1,那么肯定没有“洞”,所以奇数全为0。该二进制内存通过firstHoleSize获得内存从右到左数,空洞个数为:firstHoleSize[10] = 1。lastHoleSize[]表示从左到右,未被占用的页面多少个,只要最左位为1,那是肯定没有“洞”,所以大于128的全是0,该二进制内存通过lastHoleSize获得从左到右数,空洞个数为:lastHoleSize[10] = 4。maxHoleSize[],表示连续的最大的“洞”是多少个页面,该二进制内存通过maxHoleSize获得连续的最大的空洞个数为:maxHoleSize[10] = 4。maxHoleOffset[]是和maxHoleSize[]一起使用的,表示从右到左数,最大的“洞”的位置,该二进制内存通过maxHoleOffset获得最大的“洞”的位置为:maxHoleOffset[10] = 4。

依据上述规则,故形成上述表格数组数据。在内存空间的分配时,从管理位图内存的数组中取出相应位图数,先看看是不是有以前释放的满足要求,没有的话就从未分配内存空间中分配。

  32位操作系统对应fastdb的内存分配示意图如下

参考:http://blog.csdn.net/liuxuezong/article/details/8702382

最新文章

  1. DAO设计模式
  2. BZOJ 2093: [Poi2010]Frog
  3. 连载 [ LTS + Top ]
  4. toroiseSVN 无法连接服务器,提示unable connect to ……url 参数错误
  5. 修改sys密码与nbu备份脚本密码后,nbu备份报密码无效
  6. 每天一个Linux命令(7): cp
  7. 李洪强iOS开发之-环信01_iOS SDK 前的准备工作
  8. C++ Primer 学习笔记_84_模板与泛型编程 --模板特化
  9. Apple Watch 1.0 开发介绍 1.4 简介 使用iOS技术
  10. STL非变易算法 - STL算法
  11. 转 excel表怎么自动分列
  12. Spring自学教程-IOC、DI、AOP(二)
  13. JAVA并发编程实战---第三章:对象的共享
  14. UML和模式应用5:细化阶段(9)---迈向对象设计
  15. 18.struts-执行流程.md
  16. css3实现卡牌旋转与物体发光效果
  17. hdu 1325 判断有向图是否为树
  18. MQTT协议笔记之头部信息
  19. ZLYD团队第三周项目总结
  20. install ros-indigo-tf

热门文章

  1. Android串口通信(基于Tiny6410平台)
  2. 趣味Python入门(一):初识Python
  3. CF 295A Greg and Array (两次建树,区间更新,单点查询)
  4. hdu2018
  5. lintcode: 二叉树的锯齿形层次遍历
  6. LR_问题_无法使用LR的Controller,提示缺少license
  7. ubuntu中一些软件的命令安装及设置
  8. iOS Objective-C对象模型及应用
  9. Android Handler值传递(文)
  10. Android Handler与多线程