用于通过面向对象的程序执行动态内存管理的方法和设备技术

技术编号:2864291 阅读:250 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开是一种方法和设备,用于通过面向对象的程序运行动态内存管理,通过该方法和设备,创建频繁和生存期限短暂的对象被按顺序分配给单位内存块。在从单位内存块释放之后,该对象被添加到空闲重用列表上,以便当有对相同对象大小的分配的调用时被重用。这有利于增强系统性能。

【技术实现步骤摘要】

本专利技术一般地涉及面向对象的软件系统,更加特别地涉及在该系统中用于对象分配的动态内存管理。
技术介绍
面向对象的程序(OOP)已经被认为具有超出典型的过程式程序的优点,其包括代码复用继承、数据抽象的实现、数据的多态的真实性(factuality)、重载操作符的便利性。OOP的那些丰富的特性正不断地变得更加先进。同时,从日益增长的数量的研究来看,现在动态内存管理(DMM)被认为是软件系统的运行中的重要部分,其消耗掉其中30%的程序运行时间。因此,动态内存管理的重要性变得更大,并且实施DMM的更高效率需要提高系统中的程序运行速度。如图1和2所示,通常以不考虑对象大小的内存分配方式实行DMM。参照图1,在步骤S103中,如果有通过操作系统(OS)的方式对内存的请求,例如通过内存管理(或分配)函数malloc()而对函数sbrk()的调用,则将该内存分配给堆。然后,在步骤105中,由内存管理单元产生空闲链接列表,以将对象分配给被分割成足够大小的分区的内存(参照图2的过程A)。如果有对对象分配的请求,则在步骤S107扫描空闲链接列表,以寻找具有与请求分配的对象相同大小的节点。在步骤S109中,确定是否存在与所请求的对象的大小相同的节点。如果空闲链接列表具有与所请求的对象的大小相同的节点,则从空闲链接列表释放该节点,然后将其放入步骤S111中的对象分配过程。另一方面,如果在空闲链接列表中没有与所请求的对象大小一致的节点,则在步骤S113确定所请求的对象的大小是否大于空闲链接列表的节点。如果所请求的对象大于空闲链接列表的节点,则在步骤S115,将空闲链接列表的节点合并成单个节点(参照图2的过程B),并且在步骤S117,从将用于分配对象的空闲链接列表释放所合并的节点。反之,如果所请求的对象小于空闲链接列表的节点,则在步骤S119中,该节点被分割成较小的节点(参照图2的过程C),并且在步骤S121,从将用于分配对象的空闲链接列表释放所分割的节点。顺便提及,如果删除所分配的对象,则将分配给该对象的节点插入空闲链接列表,用于重用。这样做时,可以将大到不能插入到空闲链接列表中的节点分割成足以插入其中的更小节点。然而,DMM的常规方式在运行时消耗掉相当可观的运行时间,因为其本质上需要扫描空闲链接列表、以及合并和分割组成该空闲链接列表的节点的条件。有时候,它会与应当完全搜索空闲链接列表的最坏情况一起出现。此外,无论何时有对象分配的请求,均强行调用函数malloc(),以及实施对空闲链接列表的扫描及节点的合并与分割。
技术实现思路
本专利技术提出了一种方法和设备,用于运行具有提高了的性能的动态内存管理。本专利技术还提出了一种方法和设备,用于在有效地较短的运行时间内执行动态内存管理。根据本专利技术的一方面,实施了一种用于通过面向对象的程序的动态内存管理的方法,其包括以下步骤形成用于对象分配的空闲链接列表;通过参照该空闲链接列表,将超过预定阈值的大对象分配给通过合并多个节点以与该大对象的大小相同而产生的节点;顺序将小于或与阈值相同的小对象分配给具有大于该阈值的存储容量的内存块;当在空闲重用列表中存在对应于该对象的可重用对象时,将该对象分配给被指定给该可重用对象的内存块的特定区域。该内存块与数据结构相关联,该数据结构包括有关所分配的对象的信息;地址指针,其指明所分配的对象被指定的地址;以及释放对象指针,其指示从内存块释放的对象。参照阈值,由包括空指针元素的排列形成空闲重用列表。对应于所释放的对象的空指针中的一个指示所释放的对象。空指针指示当前一个所释放的对象,被指定给当前释放的对象的释放对象指针指示前一个所释放的对象。阈值的大小通过分析在面向对象的程序中频繁创建和消失的对象而确定。结合附图,根据对其示例实施例的下列详细描述,将会更好地理解本专利技术,并且,其范围将在所附权利要求中指出。附图说明当结合附图时,通过参照下面的描述,可以对本专利技术有更加完整的理解,其中图1是示出了用于对象的内存分配的传统过程的流程图;图2图示了图1所示的内存分配的序列;图3是根据本专利技术的用于对象分配和重用的数据结构的图示;图4是图示了根据本专利技术的对象分配过程的流程图;图5是根据本专利技术的对象分配的图示;图6是图示了根据本专利技术的对象释放的过程的流程图;图7是图示了根据本专利技术的空闲重用列表的模式的示意图;以及图8是图示了根据本专利技术的对象分配和重用的过程的流程图。具体实施例方式应当理解,对本优选实施例的描述只是示意性的,并且不应当理解为限制性的意义。在下面的详细描述中,阐述了几个特定的细节,以提供对本专利技术的透彻理解。然而,对于本领域技术人员来说,显而易见的是,可以没有这些特定的细节而实践本专利技术。现在,将结合附图来说明本专利技术的实践实施例。图3图示了在面向对象的系统中用于对象分配和重用的数据结构。用于对象分配和重用的该数据结构包括用于对象大小(alloc_size)、地址指针(*return_pointer)、以及释放对象指针(*next_f)的域。alloc_size指示将被分配的对象的大小。*return_pointer指示将指定给对象的内存块地址。*next_f表示将从内存块释放的对象。图4和5图示了在本面向对象的系统中分配对象的过程和特征。参照图4,在步骤S401中如果有对对象分配的请求,则在步骤S403确定所请求的对象的大小是否小于预定的阈值或者与其相同。该阈值可以从对对象分配模式的分析而获得,该模式实际上从面向对象的程序(OOP)产生。例如,从对OOP例如C++程序的分析注意到,几乎超过90%的对象都在其中重用,其大小非常小,最多不超过512字节。因此,关于对象的大小,将阈值确立在512字节上是合理的。如果所请求的对象大小小于阈值或与阈值相同,则在步骤S405中,提供预定存储容量的内存块以分配所请求的对象。该内存块可以从由内存管理函数malloc()形成的空闲链接列表得到。该内存块的大小可以大于阈值,例如8K字节。在步骤S407中,小于阈值的对象被按照如图5所示的顺序分配进内存块,依据其分配大小而占用该内存块。在内存块中,新分配的对象被布置在其中,以跟在先前分配的对象之后。因为是以预定的顺序将对象分配进内存块,所以在将任意对象分配给内存块之前,可以容易地知道返回地址。对数据结构大小、所请求的对象大小、以及当前地址的预先确认使得先前所分配的对象的最后地址被容易地估计出来。通过将先前所分配的对象的最后地址和将分配给该最后地址的对象的大小相加,而获得将分配的对象的返回地址。当按顺序将对象分配给内存块时,释放对象指针指示“NULL”。因为对象被分配给这样的单个内存块,所以有可能降低对函数malloc()的调用的次数。在本专利技术的这个实施例中,消耗了用于前面分配的一个内存块之后的进一步的对象分配将参照空闲链接列表,该空闲链接列表借助于函数malloc()而将新的内存块指定到其中。在步骤S403确定了所请求的对象大小大于阈值之后,借助于内存管理函数malloc()而转向用于对象分配的操作。也就是说,在步骤S409,扫描空闲链接列表,以找到具有与被请求分配的对象相同大小的节点。然后,删除与所请求的对象相同大小的节点,并将所请求的对象分配到该节点被删除的位置上。实际上,很少创建这种具本文档来自技高网
...

【技术保护点】
一种方法,用于通过面向对象的程序进行动态内存管理,该方法包括以下步骤:提供具有预定存储容量的内存块;以及将对象顺序连续分配给该内存块。

【技术特征摘要】
US 2003-9-30 10/674,2771.一种方法,用于通过面向对象的程序进行动态内存管理,该方法包括以下步骤提供具有预定存储容量的内存块;以及将对象顺序连续分配给该内存块。2.根据权利要求1的方法,还包括提供空闲重用列表的步骤,从内存块释放的对象作为对应于所释放的对象的可重用对象而被添加到该空闲重用列表。3.根据权利要求2的方法,还包括以下步骤对应于所请求的用于分配的对象而在空闲重用列表中找到可重用对象;当在空闲重用列表中有对应于所请求的对象的可重用对象时,将该所请求的对象分配给被指定给该可重用对象的内存块的特定域,并从空闲重用列表删除可重用对象;以及当空闲重用列表缺少对应于所请求的对象的可重用对象时,在内存块中进行排在最末次序上的对象之后的新的分配。4.根据权利要求1到3中的一个的方法,还包括以下步骤提供用于对象分配的空闲链接列表;当有对小于阈值或与阈值相同的小对象的分配请求时,参照空闲链接列表的节点,指定具有至少大于阈值的预定的存储容量的内存块,该内存块的存储容量足以包含请求分配的小对象;以及当有对大对象的分配请求时,参照空闲链接列表创建对应于超过阈值的大对象的节点。5.一种方法,用于通过面向对象的程序进行动态内存管理,该方法包括以下步骤(a)提供用于分配多个对象的内存块;(b)当在空闲重用列表中有对应于所请求的对象的可重用对象时,将该所请求的对象分配给被指定给该可重用对象的内存块的特定域,并从空闲重用列表删除该可重用对象;(c)当空闲重用列表缺少对应于所请求的对象的可重用对象时,在内存块中进行排在最后次序上的对象之后的新的分配;以及(d)将从内存块释放的对象添加到与该被释放的对象相对应的空闲重用列表。6.根据权利要求5的方法,还包括在提供内存块之前比较所请求的对象的大小和预定的阈值的步骤,其中,利用步骤(a)到(d)管理小于阈值或与阈值相同的对象,以及借助于内存管理函数管理大于阈值的对象。7.根据权利要求5和6中的一个的方法,其中,所述内存块与用于被分配给该内存块的对象的数据结构相关联,该数据结构包括有关所分配的对象的信息、指示所分配的对象被指定的地址的地址指针、以及指...

【专利技术属性】
技术研发人员:李宇珩
申请(专利权)人:三星电子株式会社
类型:发明
国别省市:KR[韩国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1