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

文档序号:9929437阅读:450来源:国知局
一种内存池版图解析方法和内存池装置的制造方法
【技术领域】
[0001]本发明涉及内存应用技术领域,更具体地说,涉及一种内存池版图解析方法和内存池装置。
【背景技术】
[0002]随着晶体管的特征尺寸进入到纳米尺寸以后,电路的复杂度越来越高,规模也越来越大,GDSII格式版图数据的容量规模呈指数形式上升趋势,一个容量为IG的版图文件,可能包含的图素量能够达到上亿的级别。面对大量的EDA数据信息,各种仿真软件(光刻仿真软件,化学机械仿真软件)在进行解析与操作大规模或是超大规模版图文件均遇到了不小的性能方面障碍,如果提高版图的解析与操作效率,将会对整个仿真、验证的时间大大缩短。经测试与验证,其中在版图解析过程中很大的系统时间浪费在大量的图素对象的创建与初始化环节,动态的向系统申请空间,创建对象等操作耗费了较多的系统时间,解决这一问题能够大大加速版图解析时间。所以如何快速的,灵活的解析版图文件就显的尤为重。
[0003]版图设计文件中存在大量的图素信息,主要是多边形,直线,文本等,其中绝大部分为多边形。经统计,在一个容量为IG的版图,其顶层cell含有的多边形数量能达到上亿之多,现有的技术方案中,当应用程序解析版图时,会将多边形图素信息转化为程序的数据结构,并将向系统申请存储该数据结构的内容空间。利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。
[0004]系统在接收分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存块。如果该空闲内存块过大,还需要切割再划分。然后系统更新内存空闲块表,完成一次内存分配。而在释放内存时,系统会把需要释放的内存块重新加入到空闲内存块表中。可能的话,会把相邻的空闲块合并成较大的空闲块。
[0005]默认的内存管理函数还考虑到多线程的应用,需要在每次分配和释放内存时加锁,同样增加了开销、降低了工作效率。

【发明内容】

[0006]本发明的目的在于提供一种工作效率高的内存池版图解析方法和内存池装置。
[0007]为实现上述目的,本发明实施例提供了如下技术方案:
[0008]—种内存池版图解析方法,应用于具有多个大小结构相等的内存块的内存池装置中,包括:
[0009]获取应用程序向系统发送的操作指令;
[0010]判断所述操作指令的指令类型;
[0011]当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令;
[0012]采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接;
[0013]其中,所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块的大小、结构相同。
[0014]优选的,上述内存池版图解析方法中,所述判断当前使用的内存块中是否存在空闲的内存单元,包括:
[0015]内存池通过blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于O的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。
[0016]优选的,上述内存池版图解析方法中,所述向系统发送添加内存块指令之后,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中原有的内存块进行链接之前,还包括:
[0017]当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化;
[0018]优选的,上述内存池版图解析方法中,所述初始化包括:
[0019]设置所述添加的内存块的bSize为所有内存单元的大小、bFree的值设置为n-1、bFirst的值设置为I,所述η为所述内存块中的内存单元的数量,将所述添加的内存块的所有空闲的内存单元进行链接,且每个空闲的内存单元的头两个字节用来存储下一空闲的内存单元的编号,所述bFree的值用于表征内存块中存在的空闲的内存单元的数量,所述bFirst的值用于表征内存块中已使用的内存单元的数量。
[0020]优选的,上述内存池版图解析方法中,还包括:
[0021]当所述操作指令为已使用的内存单元的删除指令时;
[0022]将与所述删除指令相匹配的内存单元返回至内存池;
[0023]查找和所述删除指令相匹配的内存单元所属的内存块;
[0024]将与所述删除指令相匹配的内存单元加到与其匹配的内存块的空闲内存单元链表的头部;
[0025]与所述删除指令相匹配的内存单元所述的内存块的bFree的值加I;
[0026]所述bFree的值用于表征内存块中存在的空闲的内存单元的数量。
[0027]优选的,上述内存池版图解析方法中,与所述删除指令相匹配的内存单元内存块的bFree的值加I后,还包括:
[0028]判断所述加I后的bFree的值是否为η,如果是,将bFree值为η的内存块返还释放给进程堆。
[0029]—种内存池装置,包括:
[0030 ]对象内存池和多个大小、结构相同的内存块;
[0031 ]所述对象内存池,用于获取并判断应用程序向系统发送的操作指令的指令类型,当所述操作指令为内存分配需求指令时,判断当前使用的内存块中是否存在空闲的内存单元,如果否,向系统发送添加内存块指令,采用指针将所述系统依据添加内存块指令添加的内存块与内存池中已经使用的内存块进行链接。
[0032]优选的,上述内存池装置中,所述内存块包括:
[0033]用于维护内存块信息的块头结构和多个内存单元,所述块头结构用于维护内存块内所有空闲的内存单元组成的链表,所述每个空闲的内存单元的头两个字节中存储有下一个空闲的内存单元的单元编号。
[0034]优选的,上述内存池装置中,所述对象内存池判断当前使用的内存块中是否存在空闲的内存单元的工作过程具体包括:
[0035]通过采用blockList指针遍历内存块链表,判断,判断是否存在bFree的值是否大于O的内存块,如果否,则确定当前使用的内存块中不存在空闲的内存单元。
[0036]优选的,上述内存池装置中,所述对象内存池的工作过程还包括:当检测到系统依据添加内存块指令添加的内存块后,对所述添加的内存块初始化。
[0037]通过以上方案可知,在本申请上述方法中,其无论存储何种大小的图素信息时,其采用的内存块的大小以及所述内存块中内存单元的大小均是一定的,只是当图素信息较大时,其所占用的内存单元或内存块的数量较多,因此能够达到快速分配内存块的目的。
【附图说明】
[0038]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0039]图1为⑶SII文件结构示意图;
[0040]图2为本申请实施例公开的一种内存池版图解析方法的流程图;
[0041]图3为本申请实施例公开的内存池装置的结构示意图;
[0042]图4为内存池的数据结构图。
【具体实施方式】
[0043]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0044]申请人经研究发现,现有技术中应用程序频繁地在堆上分配和释放内存,则会导致性能的损失。并且会使系统中出现大量的内存碎片,降低内存的利用率。对此,本申请提出了一种应用内存池加速版图解析的方法,致力于结合版图文件中图素的典型特征,建立适合自身特定的内存分配模式的自定义内存池,来实现一个具体的应用程序,该方法同时能够大大提尚版图解析时间
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1