位图内存管理:   

  每块内存用一个二进制位表示它的使用状态,如果该块内存被占用,则把对应位图中的对应位置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

fastdb中的位图应用的更多相关文章

  1. SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...

  2. SQL Server 2000中的并行处理和执行计划中的位图运算符

    SQL Server 2000中的并行处理和执行计划中的位图运算符 摘抄自:SQLServer 2000并行处理和位图简介 刘志斌 并行查询介绍Degree of Parallelism(并行度) 一 ...

  3. (转)Linux中的位图

    原文:https://www.jianshu.com/p/74626c2d2916 什么是位图 位图(bitmap)的定义 维基百科中关于位图的介绍: 一种数据结构,代表了有限域中的稠集(dense ...

  4. ps中的位图,矢量图,颜色模式

    什么是位图?什么是矢量图? 位图是由像素组成的图像,在缩放和旋转的时候容易失真,同时文件容量较大 矢量图是根据几何特性来绘制的图形,通过数学公式计算获得的,不易制作色彩变化太多的图象 颜色模式 RGB ...

  5. 【转】fastdb中的数据字典

    在程序的启动过程中,第一项任务,在没执行main 函数之前,通过REGISTER宏定义,把表的结构存储在一个全局变量的列表中static dbTableDescriptor* chain,由于此时数据 ...

  6. [ActionScript 3.0] AS3中的位图(BitmapData)应用

    1.位图使用(模糊)滤镜 //创建一个矩形区域的BitmapData var bmd:BitmapData = new BitmapData(80, 30, false, 0xffffff); //画 ...

  7. 在cocos2d-x中使用位图字体

    http://blog.csdn.net/fansongy/article/details/9006677 通常情况下,游戏中绚丽的文字和数字都不是字体生成的而是"贴"上去!今天, ...

  8. 如何将内存中的位图数据绘制在DC上

    假如你定义了一个位图类,里面包含位图头,位图信息头,调色板,位图数据.然后你按照位图的格式将位图文件读入你的类中,现在你知道了位图的全部信息了.主要信息包含在位图信息头里面,数据则在位图数据缓冲里面. ...

  9. 【Android Developers Training】 60. 在你的UI中显示位图

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. Iptables DDOS/CC 自动屏蔽脚本

    Iptables DDOS/CC 自动屏蔽脚本 May 20, 2013 最近不停地被 CC (DDOS的一种)频繁干扰,分享一个 iptables 屏蔽 DDOS 的脚本.让 crond 每分钟运行 ...

  2. 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)

      定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...

  3. D&F学数据结构系列——插入排序

    插入排序(insertion sort) 插入排序由P-1趟(pass)排序组成.对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P-1上的元素为已排序状态.插入排序利用了这样的事实:位置0到位 ...

  4. django --fields.E304 错误解决方案

    今天在同一个表里,有多个不同的用户集时出现. fields.E304: Field name <field name> clashes with accessor for <fiel ...

  5. 恢复被win7覆盖的Ubuntu Grub

    情景:本本装有Ubuntu 12.04 + Win7 32.重装Win7 64后,Ubuntu启动菜单被覆盖. 恢复的方法有多种,思路都一样.第一步,进入Linux环境:第二步.修改Grub使其重新覆 ...

  6. 李洪强iOS开发之OC[015]#pragma mark的使用

    // //  main.m //  14 - #pragma mark的使用 // //  Created by vic fan on 16/7/10. //  Copyright © 2016年 李 ...

  7. Spring transaction事务之roll back回滚

    转载自:http://blog.csdn.net/lovejavaydj/article/details/7635848 试验方法: 写一个单元测试,调用一个service层方法(发生对数据库进行写操 ...

  8. jdbc事务

    买书的例子 程序应该将图书数量的操作和更新account用户余额的操作作为一个事务来处理,只有这两个操作都完成的情况下,才能提交事务,否则就回滚事务. 本文转自http://blog.chinauni ...

  9. iOS开发--网络下载

    这里使用的是NSURLConnection的代理请求下载,并且是具有进度,UI能实时刷新,至于NSURLConnection如何请求.并且有几种请求方法请看NSURLConnection请求简介,在这 ...

  10. *EditPlus注册码在线生成

    http://www.jb51.net/tools/editplus/