CN105718319A - 一种内存池版图解析方法和内存池装置 - Google Patents
一种内存池版图解析方法和内存池装置 Download PDFInfo
- Publication number
- CN105718319A CN105718319A CN201610098782.6A CN201610098782A CN105718319A CN 105718319 A CN105718319 A CN 105718319A CN 201610098782 A CN201610098782 A CN 201610098782A CN 105718319 A CN105718319 A CN 105718319A
- Authority
- CN
- China
- Prior art keywords
- memory block
- memory
- internal storage
- storage location
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 20
- 238000000034 method Methods 0.000 claims abstract description 39
- 238000012217 deletion Methods 0.000 claims description 17
- 230000037430 deletion Effects 0.000 claims description 17
- 239000000203 mixture Substances 0.000 claims description 3
- 230000005540 biological transmission Effects 0.000 claims description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000001459 lithography Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
一种内存池版图解析方法和内存池装置,所述方法应用于具有多个大小结构相等的内存块的内存池装置中,包括:获取并判断应用程序向系统发送的操作指令的指令类型;当所述操作指令为内存分配需求指令时,当当前使用的内存块中不存在空闲的内存单元,向系统发送添加内存块指令;采用指针将所述系统添加的内存块与内存池中原有的内存块进行链接;所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块的大小、结构相同。可见在上述方法中,无论存储何种大小的图素信息时,分配内存块的大小以及所述内存块中内存单元的大小均是一定的,只是当图素信息较大时,其所占用的内存单元或内存块的数量较多,因此能够达到快速分配内存块的目的。
Description
技术领域
本发明涉及内存应用技术领域,更具体地说,涉及一种内存池版图解析方法和内存池装置。
背景技术
随着晶体管的特征尺寸进入到纳米尺寸以后,电路的复杂度越来越高,规模也越来越大,GDSII格式版图数据的容量规模呈指数形式上升趋势,一个容量为1G的版图文件,可能包含的图素量能够达到上亿的级别。面对大量的EDA数据信息,各种仿真软件(光刻仿真软件,化学机械仿真软件)在进行解析与操作大规模或是超大规模版图文件均遇到了不小的性能方面障碍,如果提高版图的解析与操作效率,将会对整个仿真、验证的时间大大缩短。经测试与验证,其中在版图解析过程中很大的系统时间浪费在大量的图素对象的创建与初始化环节,动态的向系统申请空间,创建对象等操作耗费了较多的系统时间,解决这一问题能够大大加速版图解析时间。所以如何快速的,灵活的解析版图文件就显的尤为重。
版图设计文件中存在大量的图素信息,主要是多边形,直线,文本等,其中绝大部分为多边形。经统计,在一个容量为1G的版图,其顶层cell含有的多边形数量能达到上亿之多,现有的技术方案中,当应用程序解析版图时,会将多边形图素信息转化为程序的数据结构,并将向系统申请存储该数据结构的内容空间。利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。
系统在接收分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存块。如果该空闲内存块过大,还需要切割再划分。然后系统更新内存空闲块表,完成一次内存分配。而在释放内存时,系统会把需要释放的内存块重新加入到空闲内存块表中。可能的话,会把相邻的空闲块合并成较大的空闲块。
默认的内存管理函数还考虑到多线程的应用,需要在每次分配和释放内存时加锁,同样增加了开销、降低了工作效率。
发明内容
本发明的目的在于提供一种工作效率高的内存池版图解析方法和内存池装置。
为实现上述目的,本发明实施例提供了如下技术方案:
一种内存池版图解析方法,应用于具有多个大小结构相等的内存块的内存池装置中,包括:
获取应用程序向系统发送的操作指令;
判断所述操作指令的指令类型;
当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令;
采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接;
其中,所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块的大小、结构相同。
优选的,上述内存池版图解析方法中,所述判断当前使用的内存块中是否存在空闲的内存单元,包括:
内存池通过blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于0的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。
优选的,上述内存池版图解析方法中,所述向系统发送添加内存块指令之后,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接之前,还包括:
当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化;
优选的,上述内存池版图解析方法中,所述初始化包括:
设置所述添加的内存块的bSize为所有内存单元的大小、bFree的值设置为n-1、bFirst的值设置为1,所述n为所述内存块中的内存单元的数量,将所述添加的内存块的所有空闲的内存单元进行链接,且每个空闲的内存单元的头两个字节用来存储下一空闲的内存单元的编号,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量,所述bFirst的值用于表征内存块中已使用的内存单元的数量。
优选的,上述内存池版图解析方法中,还包括:
当所述操作指令为已使用的内存单元的删除指令时;
将与所述删除指令相匹配的内存单元返回至内存池;
查找和所述删除指令相匹配的内存单元所属的内存块;
将与所述删除指令相匹配的内存单元加到与其匹配的内存块的空闲内存单元链表的头部;
与所述删除指令相匹配的内存单元所述的内存块的bFree的值加1;
所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。
优选的,上述内存池版图解析方法中,与所述删除指令相匹配的内存单元内存块的bFree的值加1后,还包括:
判断所述加1后的bFree的值是否为n,如果是,将bFree值为n的内存块返还释放给进程堆。
一种内存池装置,包括:
对象内存池和多个大小、结构相同的内存块;
所述对象内存池,用于获取并判断应用程序向系统发送的操作指令的指令类型,当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中已经使用的内存块进行链接。
优选的,上述内存池装置中,所述内存块包括:
用于维护内存块信息的块头结构和多个内存单元,所述块头结构用于维护内存块内所有空闲的内存单元组成的链表,所述每个空闲的内存单元的头两个字节中存储有下一个空闲的内存单元的单元编号。
优选的,上述内存池装置中,所述对象内存池判断当前使用的内存块中是否存在空闲的内存单元的工作过程具体包括:
通过采用blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于0的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元。
优选的,上述内存池装置中,所述对象内存池的工作过程还包括:当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化。
通过以上方案可知,在本申请上述方法中,其无论存储何种大小的图素信息时,其采用的内存块的大小以及所述内存块中内存单元的大小均是一定的,只是当图素信息较大时,其所占用的内存单元或内存块的数量较多,因此能够达到快速分配内存块的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为GDSII文件结构示意图;
图2为本申请实施例公开的一种内存池版图解析方法的流程图;
图3为本申请实施例公开的内存池装置的结构示意图;
图4为内存池的数据结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
申请人经研究发现,现有技术中应用程序频繁地在堆上分配和释放内存,则会导致性能的损失。并且会使系统中出现大量的内存碎片,降低内存的利用率。对此,本申请提出了一种应用内存池加速版图解析的方法,致力于结合版图文件中图素的典型特征,建立适合自身特定的内存分配模式的自定义内存池,来实现一个具体的应用程序,该方法同时能够大大提高版图解析时间效率和提高内存的利用率。
在设计文件中GDSII文件中数据主要是以模块结构(STRUCTURE,对应于版图中的CELL,也称之为单元)的形式组合而成的。每个模块除包含若干称之为图素(ELEMENT)的几何图形外,还可以在该模块中插入多层次的模块参数。具体地说一个GDSII文件的所有数据都是由一连串的数据块链接组成的(为方便以16进制形式显示)。模块结构内容如图1所示,包括:模块结构名、图素信息、插入模块结构名、插入模块变换模式、层号名、数据类型、图素参数以及图素坐标等数据块,这些数据块分别定义了文件头、库文件头、文件库名、数据单位、模块结构头、模块结构名、图素头、层名、数据类型、图素参数、图素坐标、图素尾、模块结构尾、第二个模块结构头、第二模块结构名、插入模块结构名(也是图素的一种)、插入模块变换模式、图素尾、第二个模块结构尾等,最后以文件末尾结束整个文件。
现有技术中版图解析流程中,在解析模块结构中图素的信息时,需要频繁的向系统申请内存空间,随着晶体管的特征尺寸进入到纳米尺寸以后,电路的复杂度越来越高,规模也越来越大,GDSII的容量规模呈直线上升趋势。其中模块结构中的图素信息也将大大增加,应用程序为存储图素信息,他需要创建一个图素对象,并初始化操作。例如一个大小为1G的版图,其顶层cell的图素数量能够达到上亿级别,如此庞大数量的图素对象的动态创建与初始化,带来了很大的系统开销。
因此本发明实施例公开了一种内存池版图解析方法,应用于具有多个大小结构相等的内存块的内存池装置中,参见图2,其流程包括:
步骤S101:获取应用程序向系统发送的操作指令;
步骤S102:判断所述操作指令的指令类型;
步骤S103:当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,执行步骤S104;
步骤S104:向系统发送添加内存块指令;
步骤S105:在获取到系统依据添加内存块指令添加的内存块后,采用指针添加的内存块与内存池中原有的内存块进行链接;
其中,所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块的结构相同。
通过本申请上述实施例公开的方法可见,在本申请上述实施例公开的方法中,其无论存储何种大小的图素信息时,其采用的内存块的大小以及所述内存块中内存单元的大小均是一定的,只是当图素信息较大时,其所占用的内存单元或内存块的数量较多,因此避免了现有技术中在针对任意图素信息的操作使用new、delete(删除)、malloc、free等API申请分配和释放内存过程中由于所申请内存块的大小由所述图素信息本身决定,导致在处理超大版图时,程序长时间运行时,频繁使用而产生大量的内存碎片从而降低程序和操作系统的性能的问题。
当应用本申请上述实施例公开的方法时,当有新的图素对象创建的请求到来时,系统会判断当前使用的内存块中是否存在空闲的内存单元,其具体判断过程可以为:内存池会通过blockList指针遍历内存块链表的方法,直到找到还有自由分配单元(空闲的内存单元)的内存块,其中检测是否还有空闲的内存单元的方法主要是通过检测各个内存块结构体的bFree的值是否大于0的方式判断内存块是否具有空闲的内存单元的,如果被检测的内存块的bFree的值大于0,则证明该内存块中具有空闲的内存单元,否则,该内存块中不存在空闲的内存单元。如果程序找到具有空闲的内存单元的内存块后,提取该内存块的bFirst值(所述bFirst值为该内存块中第1个可供分配的空闲的内存单元的编号),然后根据这个编号定位到该空闲的内存单元的起始位置,这个起始位置就是用来满足此次内存申请请求的内存的起始地址,此时该内存单元的bFree的值减1。当然,为了保证在获取到下一个内存申请请求时,能够准确定位下一个空闲的内存单元的位置信息,在返回该空闲的内存单元的起始位置之前,还需要首先将下一个空闲的内存单元的内存地址(编号)重新赋值给所述bFirst,这样当下一次的内存申请请求到来时,就采用这个bFirst的值对应的内存单元来满足本次请求,同时还需要将此内存块的bFree值递减1,然后再将已经分配到的内存单元的起始位置作为此次内存单元请求的返回地址返回给调用者。
若果应用程序进行内存请求时,如果从现有的内存块中找不到一个可分配的空闲的内存单元时(即当进行第一次请求内存时,以及现有的所有内存块中的所有内存分配单元都已经被分配时),对象内存池就会从进程堆中申请一个内存块,但是在本申请上述实施例公开的方法中,当新的内存块申请完成后,并不会立刻将刚申请的内存块的一个空闲内存单元分配出去,而是首先初始化这个内存块。所述初始化内存块的操作主要包括设置内存块的bSize为所有内存分配单元的大小、其bFree的值设置为n-1(因为即将会分配一块内存单元出去,要么从设为n-1,在分配一个出空闲内存单元后无须再将n递减1)、bFirst的值为1(为1的原因与bFree为n-1大致相同,即马上会将编号为0的自由分配单元分配出去。现在设为1,其后不用修改nFirst的值),内存块的构造需要做初始化操作,即将所有空闲的内存单元链接起来。每一个空闲的单元的头两个字节用来存储下一个空闲的单元的编号。
当然用户在操作过程中难免会出现删除信息的操作,当一个被分配出去的内存单元因为删除操作需要回收时,即此时获取到的操作指令为删除指令,在本申请上述实施例公开的方法中,与所述删除指令相匹配的内存单元并不会直接返回给程序的进程堆,而是先返回给内存池。在返回内存池时,内存池依据该内存单元的起始地址遍历所维护的内存块链表,判断该内存单元的起始地址是否落在某个内存块的地址范围内,如果在内存池中没有找到相应的内存块,则表明这个被回收的内存单元就不属于这个内存池,继续遍历其他内存池;如果在内存池中找到了符合要求的内存块,则将这个刚刚回收的内存单元添加到这个内存块所维护的空闲的内存单元链表的头部,同时该内存块头信息中bFree值递增1。当与所述删除指令相匹配的内存单元回收后,在考虑到存在该内存块中的内存单元可能全部为空闲的内存单元的情况、以及资源的有效利用及后续操作的性能的基础上,本申请上述实施例公开的方法中还可以继续对回收该内存单元的内存块进行判断,如果此内存块的所有内存单元都是空闲的,即该内存块的bFree的值为n,那么本申请上述实施例中公开的方法还需要将这个内存块由内存池中移出并作为一个整体返还释放给进程堆;如果该内存块中还存在非自由分配单元,则无需将此内存块返还给进程堆。但是因为刚刚有一个内存单元返回给了这个内存块,也就是该内存块有空闲的内存单元可供下次分配,因此该内存块会被移到内存池维护的内存块的头部。这样下次新的内存请求到来时,内存池在遍历内存块链表以寻找空闲的单元时,在第1次寻找就会找到该内存块,从而减少内存池的遍历次数。
综上所述,本申请上述实施例公开的方法中,每个对象内存池负责维护一个内存块链表,每个内存块由一个维护该内存块信息的块头数据结构和多个分配单元组成,所述块头数据结构则进一步维护该内存块中所有的由空闲的内存单元组成的链表。相较于现有技术中各个空闲的内存单元之间通过“指向下一个可分配的空闲的内存单元指针”的方式链接,本申请上述实施例公开的方法中通过“下一个可分配的空闲的内存单元编号”将各个空闲的内存单元链接起来,这个编号值存储在该空闲的内存单元单元的头两个字节中。
可以理解的是,对应于上述方法,本申请还公开了一种内存池装置,所述内存池装置中的技术特征与上述方法可相互借鉴。
本申请上述公开的所述内存池装置可以包括对象内存池和多个固定大小的内存块;
与上述方法相匹配,所述对象内存池,用于获取并判断应用程序向系统发送的操作指令的指令类型,当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令,并采用指针将所述系统依据添加内存块指令添加的内存块与内存池中已使用的内存块进行链接。
例如图3所示,该对象内存池装置中一共可包含2个大小结构相等的内存块即图3中的1和2。在对象内存池初次生成时,只向系统申请了一个内存块即内存块1,返回的指针作为整个内存池的头指针。之后随着应用程序不断地向系统提出内存分配需求,当内存池的内存单元接近用尽时,容量需要动态扩大时,对象内存池才会再次向系统申请新的内存块即内存块2,并通过指针将新申请的内存块2与内存池的原有内存块1链接起来。而这个过程对于操作系统来说,由于是所需新分配的内存块的大小是固定不变的,因此其分配的速度比较快;对于应用程序来说,其对象内存池开辟了一定大小的内存块,其内部却仍然还有剩余的空间。
例如放大来看内存块2,所述内存块2中包含一部分内存池块头信息和3个大小相等的内存单元。假如内存单元二和内存单元三未被分配的、是空闲的,单元一已经被分配。当应用程序需要再次创建对象时,通过该内存池装置分配一个对象单元大小的内存时,只需要简单遍历所有的内存池块头信息,快速定位到还有空闲的内存单元的内存块。然后根据内存块块的内存块信息定位到该内存块中的第1个空闲的内存单元编号,把这个编号返回,并且标记下一个空闲内存单元的编号即可;当应用程序释放某一个内存单元时,直接在对应的内存池块头信息中标记该内存单元为空闲的内存单元即可。
对象内存池的数据结构如图4所示,其原理是首先定义对象内存池的头信息,该头信息中将规定每一个申请的内存块的大小,每一个内存单元的大小,并且对象内存池存有一个内存块的索引;每一个内存块包含内存块的头信息,所述内存块的头信息主要包含内存块大小、内存单元的起始位置、内存单元的数量、空闲的、已使用内存单元的数量、并且使用指针标识当前时间空闲的内存单元的编号。每一个内存单元存在一个指向下一个内存块的指针。当一个内存块的所有内存单元都已经被占用时,对象内存池将再次向系统申请一内存块,并进行相关初始化操作。
可以理解的是,与上述方法相对应,本申请上述实施例中的内存块包括:
用于维护内存块信息的块头结构和多个内存单元,所述块头结构用于维护内存块内所有空闲的内存单元组成的链表,所述每个空闲的内存单元的头两个字节中存储有下一个空闲的内存单元的单元编号。
与上述方法相对应,所述对象内存池判断当前使用的内存块中是否存在空闲的内存单元的工作过程具体可为:
通过采用blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于0的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元。所述对象内存池在检测到系统依据所述添加内存块指令添加内存块后的工作过程还可以包括:对所述添加的内存块初始化。
本申请上述方法中对象内存池装置由一系列固定大小的内存块组成,每一个内存块又包含了一定数量的内存单元。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种内存池版图解析方法,其特征在于,应用于具有多个大小结构相等的内存块的内存池装置中,包括:
获取应用程序向系统发送的操作指令;
判断所述操作指令的指令类型;
当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令;
采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接;
其中,所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块的大小、结构相同。
2.根据权利要求1所述的内存池版图解析方法,其特征在于,所述判断当前使用的内存块中是否存在空闲的内存单元,包括:
内存池通过blockList指针遍历内存块链表,判断是否存在bFree的值是否大于0的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。
3.根据权利要求1所述的内存池版图解析方法,其特征在于,所述向系统发送添加内存块指令之后,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接之前,还包括:
当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化。
4.根据权利要求3所述的内存池版图解析方法,其特征在于,所述初始化包括:
设置所述添加的内存块的尺寸为所有内存单元的大小,bFree的值设置为n-1、bFirst的值设置为1,所述n为所述内存块中的内存单元的数量,将所述添加的内存块的所有空闲的内存单元进行链接,且每个空闲的内存单元的头两个字节用来存储下一空闲的内存单元的编号,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量,所述bFirst的值用于表征内存块中已使用的内存单元的数量。
5.根据权利要求1所述的内存池版图解析方法,其特征在于,还包括:
当所述操作指令为已使用的内存单元的删除指令时;
将与所述删除指令相匹配的内存单元返回至内存池;
查找和所述删除指令相匹配的内存单元所属的内存块;
将与所述删除指令相匹配的内存单元加到与其匹配的内存块的空闲内存单元链表的头部;
与所述删除指令相匹配的内存单元所述的内存块的bFree的值加1;
所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。
6.根据权利要求5所述的内存池版图解析方法,其特征在于,与所述删除指令相匹配的内存单元内存块的bFree的值加1后,还包括:
判断所述加1后的bFree的值是否为n,如果是,将bFree值为n的内存块返还释放给进程堆。
7.一种内存池装置,其特征在于,包括:
对象内存池和多个大小、结构相同的内存块;
所述对象内存池,用于获取并判断应用程序向系统发送的操作指令的指令类型,当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中已经使用的内存块进行链接。
8.根据权利要求7所述的内存池装置,其特征在于,所述内存块包括:
用于维护内存块信息的块头结构和多个内存单元,所述块头结构用于维护内存块内所有空闲的内存单元组成的链表,所述每个空闲的内存单元的头两个字节中存储有下一个空闲的内存单元的单元编号。
9.根据权利要求7所述的内存池装置,其特征在于,所述对象内存池判断当前使用的内存块中是否存在空闲的内存单元的工作过程具体包括:
通过采用blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于0的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元。
10.根据权利要求7所述的内存池装置,其特征在于,所述对象内存池的工作过程还包括:当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610098782.6A CN105718319B (zh) | 2016-02-23 | 2016-02-23 | 一种内存池版图解析方法和内存池装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610098782.6A CN105718319B (zh) | 2016-02-23 | 2016-02-23 | 一种内存池版图解析方法和内存池装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105718319A true CN105718319A (zh) | 2016-06-29 |
CN105718319B CN105718319B (zh) | 2019-03-15 |
Family
ID=56156056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610098782.6A Active CN105718319B (zh) | 2016-02-23 | 2016-02-23 | 一种内存池版图解析方法和内存池装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105718319B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN109471771A (zh) * | 2018-10-19 | 2019-03-15 | 许昌许继软件技术有限公司 | 一种Nucleus系统的动态内存池监测方法及装置 |
CN110321220A (zh) * | 2019-06-18 | 2019-10-11 | 上海交通大学 | 一种针对drc的mac层内存池及其划分方法 |
CN110943936A (zh) * | 2019-11-08 | 2020-03-31 | 中国科学院信息工程研究所 | 一种高效的基于动态数组的网络流量处理方法及系统 |
CN115981831A (zh) * | 2021-10-14 | 2023-04-18 | 中移物联网有限公司 | 内存管理方法及相关设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1303534C (zh) * | 2003-03-03 | 2007-03-07 | 华为技术有限公司 | 一种内存池管理的方法 |
CN100359489C (zh) * | 2004-07-13 | 2008-01-02 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN100517242C (zh) * | 2007-10-10 | 2009-07-22 | 中兴通讯股份有限公司 | 快速申请内存的方法 |
CN101968772B (zh) * | 2010-10-22 | 2013-01-16 | 烽火通信科技股份有限公司 | 嵌入式系统高效内存池的实现方法 |
CN103399821A (zh) * | 2013-06-28 | 2013-11-20 | 贵阳朗玛信息技术股份有限公司 | jitterbuf内存处理方法及装置 |
-
2016
- 2016-02-23 CN CN201610098782.6A patent/CN105718319B/zh active Active
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN108132842B (zh) * | 2017-12-15 | 2021-11-02 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN108038002B (zh) * | 2017-12-15 | 2021-11-02 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN109471771A (zh) * | 2018-10-19 | 2019-03-15 | 许昌许继软件技术有限公司 | 一种Nucleus系统的动态内存池监测方法及装置 |
CN110321220A (zh) * | 2019-06-18 | 2019-10-11 | 上海交通大学 | 一种针对drc的mac层内存池及其划分方法 |
CN110321220B (zh) * | 2019-06-18 | 2023-06-27 | 上海交通大学 | 一种针对drc的mac层内存池及其划分方法 |
CN110943936A (zh) * | 2019-11-08 | 2020-03-31 | 中国科学院信息工程研究所 | 一种高效的基于动态数组的网络流量处理方法及系统 |
CN115981831A (zh) * | 2021-10-14 | 2023-04-18 | 中移物联网有限公司 | 内存管理方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105718319B (zh) | 2019-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105718319A (zh) | 一种内存池版图解析方法和内存池装置 | |
CN103034544B (zh) | 一种用户态与内核态共享内存的管理方法和装置 | |
CN108038002B (zh) | 一种嵌入式软件内存管理方法 | |
CN109690498B (zh) | 内存管理方法和设备 | |
CN102760080B (zh) | 一种内存管理的方法和装置 | |
CN107066498B (zh) | 键值kv存储方法和装置 | |
CN106681829A (zh) | 一种内存管理方法及系统 | |
CN106445835B (zh) | 内存分配方法与装置 | |
CN102289409B (zh) | 分层可伸缩的存储器分配器 | |
CN1996258A (zh) | 一种动态内存池的实现方法 | |
CN112685333B (zh) | 一种堆内存管理方法及装置 | |
CN106095589A (zh) | 一种分配分区的方法、装置及系统 | |
CN102722432A (zh) | 追踪内存访问的方法和装置 | |
CN110334069B (zh) | 多进程间的数据共享方法及相关装置 | |
CN105302737A (zh) | 一种内存分配管理方法及系统 | |
CN105468660A (zh) | 分布式文件系统的读方法、客户端设备及分布式文件系统 | |
CN104254839A (zh) | 用于分割单链表以供分配存储器元素的系统和方法 | |
CN103488523A (zh) | 一种页的访问方法和页的访问装置、服务器 | |
CN104850505A (zh) | 基于链式堆叠的内存管理方法与系统 | |
CN103455433A (zh) | 内存管理方法及系统 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
CN102279808A (zh) | 一种嵌入式设备图像内存管理方法及装置 | |
CN105468541A (zh) | 一种面向透明计算智能终端的缓存管理方法 | |
CN105446889A (zh) | 一种内存管理方法、装置以及内存控制器 | |
CN106156049A (zh) | 一种数据读取的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |