一种内存池版图解析方法和内存池装置的制造方法_3

文档序号:9929437阅读:来源:国知局
共可包含2个大小结构相等的内存块即图3中的I和2。在对象内存池初次生成时,只向系统申请了一个内存块即内存块I,返回的指针作为整个内存池的头指针。之后随着应用程序不断地向系统提出内存分配需求,当内存池的内存单元接近用尽时,容量需要动态扩大时,对象内存池才会再次向系统申请新的内存块即内存块2,并通过指针将新申请的内存块2与内存池的原有内存块I链接起来。而这个过程对于操作系统来说,由于是所需新分配的内存块的大小是固定不变的,因此其分配的速度比较快;对于应用程序来说,其对象内存池开辟了一定大小的内存块,其内部却仍然还有剩余的空间。
[0063]例如放大来看内存块2,所述内存块2中包含一部分内存池块头信息和3个大小相等的内存单元。假如内存单元二和内存单元三未被分配的、是空闲的,单元一已经被分配。当应用程序需要再次创建对象时,通过该内存池装置分配一个对象单元大小的内存时,只需要简单遍历所有的内存池块头信息,快速定位到还有空闲的内存单元的内存块。然后根据内存块块的内存块信息定位到该内存块中的第I个空闲的内存单元编号,把这个编号返回,并且标记下一个空闲内存单元的编号即可;当应用程序释放某一个内存单元时,直接在对应的内存池块头信息中标记该内存单元为空闲的内存单元即可。
[0064]对象内存池的数据结构如图4所示,其原理是首先定义对象内存池的头信息,该头信息中将规定每一个申请的内存块的大小,每一个内存单元的大小,并且对象内存池存有一个内存块的索引;每一个内存块包含内存块的头信息,所述内存块的头信息主要包含内存块大小、内存单元的起始位置、内存单元的数量、空闲的、已使用内存单元的数量、并且使用指针标识当前时间空闲的内存单元的编号。每一个内存单元存在一个指向下一个内存块的指针。当一个内存块的所有内存单元都已经被占用时,对象内存池将再次向系统申请一内存块,并进行相关初始化操作。
[0065]可以理解的是,与上述方法相对应,本申请上述实施例中的内存块包括:
[0066]用于维护内存块信息的块头结构和多个内存单元,所述块头结构用于维护内存块内所有空闲的内存单元组成的链表,所述每个空闲的内存单元的头两个字节中存储有下一个空闲的内存单元的单元编号。
[0067]与上述方法相对应,所述对象内存池判断当前使用的内存块中是否存在空闲的内存单元的工作过程具体可为:
[0068]通过采用blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于O的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元。所述对象内存池在检测到系统依据所述添加内存块指令添加内存块后的工作过程还可以包括:对所述添加的内存块初始化。
[0069 ]本申请上述方法中对象内存池装置由一系列固定大小的内存块组成,每一个内存块又包含了一定数量的内存单元。
[0070]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0071]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【主权项】
1.一种内存池版图解析方法,其特征在于,应用于具有多个大小结构相等的内存块的内存池装置中,包括: 获取应用程序向系统发送的操作指令; 判断所述操作指令的指令类型; 当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令; 采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接; 其中,所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块的大小、结构相同。2.根据权利要求1所述的内存池版图解析方法,其特征在于,所述判断当前使用的内存块中是否存在空闲的内存单元,包括: 内存池通过blockList指针遍历内存块链表,判断是否存在bFree的值是否大于O的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。3.根据权利要求1所述的内存池版图解析方法,其特征在于,所述向系统发送添加内存块指令之后,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接之前,还包括: 当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化。4.根据权利要求3所述的内存池版图解析方法,其特征在于,所述初始化包括: 设置所述添加的内存块的尺寸为所有内存单元的大小,bFree的值设置为n-l、bFirst的值设置为I,所述η为所述内存块中的内存单元的数量,将所述添加的内存块的所有空闲的内存单元进行链接,且每个空闲的内存单元的头两个字节用来存储下一空闲的内存单元的编号,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量,所述bFir st的值用于表征内存块中已使用的内存单元的数量。5.根据权利要求1所述的内存池版图解析方法,其特征在于,还包括: 当所述操作指令为已使用的内存单元的删除指令时; 将与所述删除指令相匹配的内存单元返回至内存池; 查找和所述删除指令相匹配的内存单元所属的内存块; 将与所述删除指令相匹配的内存单元加到与其匹配的内存块的空闲内存单元链表的头部; 与所述删除指令相匹配的内存单元所述的内存块的bFree的值加I; 所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。6.根据权利要求5所述的内存池版图解析方法,其特征在于,与所述删除指令相匹配的内存单元内存块的bFree的值加I后,还包括: 判断所述加I后的bFree的值是否为n,如果是,将bFree值为η的内存块返还释放给进程堆。7.—种内存池装置,其特征在于,包括: 对象内存池和多个大小、结构相同的内存块; 所述对象内存池,用于获取并判断应用程序向系统发送的操作指令的指令类型,当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中已经使用的内存块进行链接。8.根据权利要求7所述的内存池装置,其特征在于,所述内存块包括: 用于维护内存块信息的块头结构和多个内存单元,所述块头结构用于维护内存块内所有空闲的内存单元组成的链表,所述每个空闲的内存单元的头两个字节中存储有下一个空闲的内存单元的单元编号。9.根据权利要求7所述的内存池装置,其特征在于,所述对象内存池判断当前使用的内存块中是否存在空闲的内存单元的工作过程具体包括: 通过采用blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于O的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元。10.根据权利要求7所述的内存池装置,其特征在于,所述对象内存池的工作过程还包括:当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化。
【专利摘要】一种内存池版图解析方法和内存池装置,所述方法应用于具有多个大小结构相等的内存块的内存池装置中,包括:获取并判断应用程序向系统发送的操作指令的指令类型;当所述操作指令为内存分配需求指令时,当当前使用的内存块中不存在空闲的内存单元,向系统发送添加内存块指令;采用指针将所述系统添加的内存块与内存池中原有的内存块进行链接;所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块的大小、结构相同。可见在上述方法中,无论存储何种大小的图素信息时,分配内存块的大小以及所述内存块中内存单元的大小均是一定的,只是当图素信息较大时,其所占用的内存单元或内存块的数量较多,因此能够达到快速分配内存块的目的。
【IPC分类】G06F9/50
【公开号】CN105718319
【申请号】CN201610098782
【发明人】张贺, 陈岚
【申请人】中国科学院微电子研究所
【公开日】2016年6月29日
【申请日】2016年2月23日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1