内存管理的制作方法

文档序号:6627926阅读:198来源:国知局
内存管理的制作方法
【专利摘要】本发明涉及一种用于在划分成连续内存段(20)的内存堆(26)内管理内存池(12)的方法。该方法包括通过:接收特定内存段(20’)的识别密钥(32),根据基于识别密钥(32)的转换表(10)确定特定内存段(20’)的起始地址和尺寸,并且以特定内存段(20’)的尺寸将分配在内存堆(26)内位于特定内存段(20’)的起始地址之后的内存段(20)朝着内存堆(26)的起点移动,来删除特定内存段(20’),使得所述内存池(12)由连续分配的第一部分(28)和连续未分配的第二部分(30)构成。
【专利说明】内存管理

【技术领域】
[0001]本发明涉及一种用于管理内存池的方法、计算机程序以及计算机可读介质。

【背景技术】
[0002]在基于计算机的系统(例如,嵌入式系统)中,可支持一种手动进行内存管理的方法,用于分配和删除数据。通过手动管理内存,内存通常由于删除而产生碎片,其中,用户明确地请求删除特定分配的内存段。
[0003]已经开发了用于减少碎片的多种技术,如果将随机大小的数据分配给内存,那么这些技术不能完全消除碎片。此外,已经开发了自动内存管理器的解决方案(例如,垃圾收集)以及为分配具有固定尺寸的数据而消除碎片的解决方案。然而,这些解决方案可具有某些缺点,并且并非始终适合、特别是用于嵌入式系统中。


【发明内容】

[0004]本发明的目标在于,提供一种管理内存池的方法,完全消除内存的碎片。
[0005]该目标由独立权利要求的主题实现。通过从属权利要求并且通过以下描述,进一步的示例性实施方式显而易见。
[0006]本发明的一个方面涉及一种用于管理划分成连续内存段的内存堆的内存池的方法。
[0007]术语内存池可理解为在任何基于计算机的系统的内存堆内的内存的某个区域,所述某个区域可包括一部分或整个内存堆。为了全面管理内存池,内存池可具有已知的起始地址和已知的尺寸。在其中,根据机器的结构,内存池的尺寸可与各个基于计算机的系统的机器字的尺寸一致,即,该尺寸可为机器专用字长的倍数,例如,8、16、32、61位字长的倍数。例如,内存堆可为或包括RAM、EPROM或FLASH内存的一部分。
[0008]内存池的内存段可具有不同和/或相同的尺寸,其中,每个内存段的尺寸可与机器字长一致。每个内存段在内存池内具有区段专用的起始和结束地址,并且内存段的连续设置可表示在两个后续区段之间没有间隙,即,在两个后续区段之间没有未分配的内存。
[0009]根据本发明的一个实施方式,该方法包括通过:接收特定内存段的识别密钥,根据基于识别密钥的转换表确定特定内存段的起始地址和尺寸,并且将分配于内存池内的特定内存段的起始地址之后的内存段以特定内存段的尺寸朝着内存堆的起点移动,来删除特定内存段,使得内存池由连续分配的第一部分和连续未分配的第二部分构成。换言之,在删除特定数据段后,在内存池中移动具有起始地址的所有分配的内存段,该起始地址比特定内存段的起始地址更大,以便保持在其间的未分配的内存没有间隙。因此,可完全消除内存池的碎片。
[0010]由于如果在内存池内未分配的内存没有间隙,那么可更快速地执行命令和/或某些软件元件(在运行期间,必须略过),所以完全消除碎片尤其在嵌入式系统中有用。除此之外,在动态分配的内存池中没有碎片,可允许满负荷地使用内存资源,并且客户端应用程序可完全保持控制所使用的内存资源。再者,这在嵌入式系统中尤其有用,其中,RAM的成本对最终产品的成本具有重要影响。因此,重要的是,降低和/或控制RAM的成本。
[0011]根据本发明的一个实施方式,移动内存段包括:通过将特定内存段的尺寸加至特定内存段的起始地址而确定分配的内存块的起始地址;确定分配的内存块的长度,所分配的内存块的长度是分配于特定内存段之后内存段的长度的总和;以及将所分配的内存块移动至特定内存段的起始地址。
[0012]因此,所分配的内存块在具有起始地址的内存池内可包括所有分配的内存段,该起始地址比待删除的特定内存段更大。将分配的块移动到特定内存段的起始地址,可确保特定内存段的数据由包含在内存块内的数据重写,因此,可删除特定内存段。此外,通过将内存块移动到特定内存段的起始地址,可确保在内存池内没有任何间隙。因此,在删除特定内存段之后,内存池由连续分配的第一部分和连续未分配的第二部分构成。
[0013]除了将在所分配的内存块中的所有内存段的单独长度求和以外,例如,还可在删除特定内存段之前,通过从在内存池中的连续未分配的部分的起始地址中减去特定内存段的起始地址和尺寸,确定所述块的长度。为此,连续未分配的部分的起始地址可全局地储存,例如,作为指针,或者还可储存在转换表中。
[0014]根据本发明的一个实施方式,转换表包括具有所分配的内存段的识别密钥、起始地址以及尺寸的条目。换言之,对于在内存池中的每个分配的内存段,区段专用的识别密钥、起始地址以及尺寸可储存在转换表的条目内。同样,转换表可储存在内存堆内。
[0015]识别可例如为顺序整数,表示在转换表中的某个位置。内存段的起始地址和尺寸可为机器专用的字长的字节的倍数,即,例如,8、16、32、64位字长的倍数。
[0016]通常,转换表可用作软件部件的虚拟机构,其中,可由软件部件提供识别密钥,例如,用于删除特定数据段,而非在内存池中的地址或地址范围。反之亦然,可在运行期间将识别密钥提供给软件部件,以便使用储存在内存池内的数据。
[0017]根据本发明的一个实施方式,删除特定内存段进一步包括重新计算具有位于特定内存段起始地址之后的起始地址的转换表内每个内存段的起始地址。
[0018]为了在将分配的内存块移动至特定内存段的起始地址之后,正确地连接在转换表中的条目和在内存池中的内存段,可重新计算在内存块中的每个分配的内存段的起始地址。例如,通过从在特定区段之后分配的每个内存段的起始地址中减去特定内存段的长度,可实现起始地址的实际重新计算。
[0019]根据本发明的一个实施方式,转换表包括固定数量的条目,并且无论是否使用该条目,每个条目都包括字段。可根据软件部件的需要和需求,确定转换表的固定尺寸。然而,转换表还可根据软件部件的需要和需求动态地扩展。
[0020]在转换表中使用的条目可表示有效分配内存段。在删除内存段时,可将相应的字段设为“未使用”。例如,该字段可为单比特,该比特可根据在转换表中的各个条目的状态被设为零或一。除此以外,所使用的条目可包括对转换表中下一个使用的条目的引用。例如,这可允许更快速地通过在转换表中使用的所有条目进行扫描或者在这些条目内进行搜索,并且可允许删除一系列分配的内存段。
[0021]根据本发明的一个实施方式,删除特定内存段进一步包括设定转换表中使用的条目的引用,该引用对特定内存段的条目的引用进行引用,并指向该特定内存段的条目。换言之,位于特定内存段(即,具有比特定区段更小的起始地址的内存段)之前的第一个使用的条目的引用可被设为引用在特定内存段之后的第一个使用的内存段。
[0022]根据本发明的一个实施方式,用于管理内存池的方法进一步包括通过:接收特定内存段的识别密钥;根据基于识别密钥的转换表确定特定内存段的总尺寸;并且将分配于特定内存段之后的内存段朝着内存池的起点以特定内存段的总尺寸移动,来删除一排特定内存段。
[0023]可例如通过提供要待删除的第一内存段的起始识别密钥以及待删除的末端内存段的末端识别密钥,限定这排特定内存段,其中,可删除在起始和末端识别密钥之间的所有内存段。除此以外,可例如通过软件部件提供内存段的一系列识别密钥或待删除的多个内存段的一个起始密钥或整数。
[0024]释放一系列分配的内存的规定的可能性可允许减少所需要的操作数量,作为优化,这可有用,但是这还是避免保持跟踪与所分配的内存段相关联的所有识别密钥的一种好方法。
[0025]此外,在例如软件部件停止之后,通过手动管理整个内存池,一次可释放在内存池内的所有资源,从而降低内存泄露的可能性。
[0026]根据本发明的一个实施方式,用于管理内存池的方法进一步包括通过:接收新内存段的长度;将新内存段的起始地址设为包括已分配内存段的分配的内存块的端部;生成新内存段的新识别密钥;在转换表中搜索未使用的条目;将条目标记为使用的;以及在该条目中储存新内存段的新识别密钥和起始地址,来请求新内存段。换言之,如果例如由软件部件请求新内存段,以便在新内存段内储存某个数据量,那么新内存段可设置在所有先前分配的内存段之后,并且在转换表中的未使用的条目内储存新内存段的特征,即,起始地址、尺寸以及识别密钥。这可确保整个内存池由连续分配的第一部分和连续未分配的第二部分构成,即,内存池没有碎片。
[0027]根据本发明的一个实施方式,用于管理内存池的方法进一步包括通过:接收所分配的内存段的识别密钥;以及根据识别密钥从转换表中确定起始地址,来请求所分配的内存段。例如,软件部件可通过将识别密钥提供给各个内存段,来请求储存在分配的内存段内的数据。反过来,识别密钥可用于搜索在转换表中的相应条目以及所请求的内存段的相应起始地址。
[0028]本发明的一个方面涉及一种用于管理内存池的计算机程序,在由处理器执行时,该计算机程序适合于执行在上文中以及在下文中描述的方法的步骤。例如,处理器可为在嵌入式系统内或者在任何其他基于计算机的系统内的处理器。例如,用于管理内存池的计算机程序可为与一个或几个其他计算机程序互连的独立程序,或者例如,该计算机程序可作为在另一个计算机程序中的软件元件来实现。
[0029]本发明的另一个方面涉及一种计算机可读介质,用于管理内存池的这种计算机程序储存在该计算机可读介质内。例如,非易失性计算机可读介质可为软盘、硬盘、USB(通用串行总线)储存装置、RAM(随机存取存储器)、R0M(只读存储器)、EPROM(可擦可编程只读存储器)或FLASH存储器。计算机可读介质还可为允许下载程序代码的数据通信网络(例如,因特网)。
[0030]通过在后文中描述的实施方式,本发明的这些和其他方面显而易见,并且参照这些实施方式,阐述这些和其他方面。

【专利附图】

【附图说明】
[0031 ] 下面,参照附图,更详细地描述本发明的实施方式。
[0032]图1示意性示出根据本发明的一个实施方式的转换表及其与内存池的互连;
[0033]图2示意性示出根据本发明的一个实施方式在转换表以及内存池内删除特定内存段;
[0034]图3在根据本发明的一个实施方式删除特定内存段之后示意性示出了图2的转换表和内存池;
[0035]图4示出根据本发明的一个实施方式示意性描述用于管理内存池的方法的某些步骤的流程图;
[0036]图5不出根据本发明的一个实施方式不意性描述用于管理内存池的方法的某些步骤的流程图;
[0037]图6示出根据本发明的另一个实施方式示意性描述用于管理内存池的方法的某些步骤的流程图;
[0038]图7示出根据本发明的又一个实施方式示意性描述用于管理内存池的方法的某些步骤的流程图。
[0039]原则上,在图中,相同的部件具有相同的参考符号。

【具体实施方式】
[0040]图1示意性示出了根据本发明的一个实施方式的转换表10及其与内存池12的互连。
[0041]转换表10包括固定数量的条目14,可通过识别密钥16、16’引用每个条目。由此而论,识别密钥16、16’可理解为在转换表10内的位置或行或顺序整数。
[0042]例如,某些识别密钥16分别与在内存池12中的分配的内存段20相关联,并且其他识别密钥16’与内存池12不相关联。因此,不相关联的识别密钥16’可被视为空闲。
[0043]对于与分配的内存段20相关联的每个识别密钥16,转换表10包括具有对起始地址引用22的域18a以及具有分配的内存段20的尺寸的域18b。为此,每个分配的内存段的起始地址和尺寸可储存在转换表10的域18a、18b内,其字节是机器专用的字长的倍数。起始地址还可例如作为各个地址的指示器储存在内存池12内。
[0044]除了分配的内存段20的起始地址和尺寸的条目18a、18b以外,转换表10包括每个条目14的域18c,表示使用相应的条目14,S卩,识别密钥与分配的内存段20相关联。为此,域18c可包括单比特,该比特可被设为零或一。
[0045]另一方面,对于与分配的内存段20不相关联的每个条目14,域18c被设为“未使用的”,从而表示出相应的条目14空闲。为此,储存在域18c内的单比特可被设置为与用于表示“使用的”条目14的值相反的二进制值。
[0046]此外,对于每个条目14,转换表10包括域18d,该域具有至转换表10的下一个使用的条目14的引用或链接24。例如,下一个使用的识别密钥16或在两个连续使用的条目14之间的多个条目可储存在域18d内。
[0047]通常,转换表10可被视为包括固定数量的条目或元素的表格,每个条目或元素可与识别密钥相关联并且由该识别密钥识别。在该情况下每个元素可包括域18a、18b、18c、18d。
[0048]根据在转换表10中使用的识别密钥16,可包括一部分或整个内存堆26的内存池12被划分成连续内存段20,该内存段具有可变尺寸并且在内存堆26内的起始地址增加。
[0049]因此,整个内存池12由第一部分28和第二部分30构成,由连续分配的内存段20连续地分配第一部分,并且第二部分为连续地未分配,即,部分30完全由空闲内存构成。
[0050]为了进行综合内存管理,连续未分配的部分30的起始地址可全局地储存,或者可储存在转换表10中,例如通过指针。
[0051]图2示意性示出了根据本发明的一个实施方式在转换表10以及内存池12内删除与识别密钥32相关联的特定内存段20’。
[0052]为了实际删除特定内存段20’,包括所有内存段20的内存块34朝着内存堆26的起点以特定内存段20’的尺寸移动,这些内存段20分配于内存池12或内存堆26内的特定内存段20’的起始地址之后,在图2中由箭头31表示。
[0053]图3在根据本发明的一个实施方式删除特定内存段20’之后示意性示出了图2的转换表10和内存池12。
[0054]在删除特定内存段20’之后,内存池12再次包括连续分配的第一部分28和连续未分配的第二部分30。在删除内存段20’之后,第二部分30增加了删除的内存段的尺寸,并且可储存第二部分的起始地址。
[0055]通过在转换表10的域18c内设置相应的值,删除的内存段20’的识别密钥32标记为“未使用的”。
[0056]除此以外,在位于删除的内存段20’的识别密钥32之前的第一个使用的识别密钥的域18d中的值由在转换表10中的下一个使用的识别密钥重新引用,该识别密钥可为在删除之前由删除的内存段20’所引用的识别密钥。
[0057]图4示出了示意性显示用于管理内存池12的方法的步骤的流程图。在其中,这些步骤涉及在内存堆26的内存池12内删除特定内存段20’,即,释放在特定内存段20’内分配的数据。在图1到图3中示意性显示了与内存段20’的删除对应的转换表10的状态以及内存池12的状态。
[0058]在步骤SI中,接收待删除的特定内存段20’的识别密钥32。例如,在结束工序时,可由软件部件提供识别密钥。
[0059]在接收识别密钥32之后,在步骤SI’中,可非必要地检查在与识别密钥32相关联的转换表10的域18c内识别密钥32是否标记为使用的。
[0060]在步骤S2中,通过与在转换表10中的识别密钥32相关联的域18a、18b的条目,确定特定内存段20’的起始地址和尺寸。
[0061]在步骤S3中,将分配于内存池12或内存堆26内的特定内存段20’的起始地址之后的内存段20朝着内存堆26的起点以特定内存段20’的尺寸移动。
[0062]在该情况下,压缩整个内存池12,以便内存池12由连续分配的第一部分28和连续未分配的第二部分30构成。
[0063]通过在步骤S3中移动分配的区段20,内存池12可实现实际压缩。为此,通过将特定内存段20’的尺寸加至特定内存段20’的起始地址,在步骤S3a中可确定分配的内存块34的起始地址。因此,所分配的内存块以在内存池12中的下一个使用的内存段20开始。
[0064]在步骤S3b中,可确定分配的内存块34的长度,分配的内存块34的长度是在特定内存段20’之后分配的内存段20的长度的总和。此外,具有另一种更容易的方法,用于计算内存块34的长度,即,通过从第一 id中减去内存段的起始地址,以便从未分配的内存的全局所知的起点中去除。
[0065]在步骤S3c中,分配的内存块34最后移动到特定内存段20的起始地址。
[0066]因此,步骤S3c可被视为单个内存复制,其中,复制的源点可为分配的内存块34的起始地址,终点可为特定内存段20’的起始地址,并且分配的内存块34的长度可为特定内存段20’之上的使用的内存池12的长度。使用在具有机器代码水平的大部分平台上支持的系统命令(例如,’ memcpy'),可例如在单个操作内实现规定的内存复制。
[0067]在步骤S4中,重新计算具有在特定内存段20’的起始地址之后的起始地址的在转换表10中的每个内存段20的起始地址。换言之,对于与内存段20相关联的每个使用的识别密钥16,重新计算储存在转换表10的相应域18a内的起始地址,在位于内存池12内的特定内存段20’之后分配内存段20,S卩,内存段20具有的起始地址比特定内存段20’的起始地址更大。
[0068]为此,整个或部分转换表10可成环,并且对于每个使用的识别密钥16,可检查是否在特定区段20’之后分配各个内存段。如果是这样的话,那么可从在内存段20’之后分配的内存段20的每个起始地址中减去特定内存段20’的长度,并且重新计算的起始地址可储存在转换表10的相应域18a内。
[0069]在步骤S5中,通过在与识别密钥32相关联的相应域18c内设置相应标志,删除的内存段20’的识别密钥32可标记为在转换表中未使用。
[0070]在步骤S6中,转换表10的域18d中使用的条目的引用,其中该使用的条目指向特定内存段20’的识别密钥32,设为对该条目的引用。换言之,可恢复在删除内存段20’之后在位于转换表10内的剩余元素之间的链接,以便具有域18d中的条目的元素,其中该条目指向去除的内存段20’的识别密钥32,现在指向下一个使用的识别密钥16(或者包含-1,或如果去除的内存段20’是在转换表10中的最后一个,那么“未使用的”)。
[0071]图5示出了示意性描述用于管理内存池的方法的某些步骤的流程图。在其中,这些步骤涉及在内存堆26的内存池12内删除不止一个特定内存段20’。
[0072]在步骤SlO中,接收特定内存段20’的识别密钥16,其中,识别密钥16可为起始识别密钥和末端识别密钥。
[0073]在步骤Sll中,根据识别密钥16,从转换表10中确定特定内存段20’的总尺寸。
[0074]通过使从起始识别密钥开始的转换表成环,可确定当前总尺寸。对于在起始识别密钥之后的每个识别密钥16,通过将在转换表10中的当前元素的尺寸加至具有起始识别密钥的元素的尺寸,可计算待去除的内存的总尺寸。通过在相应域18c内设置标志,在转换表10中的当前元素可标记为未使用的,并且当前元素的域18d可在待删除的这排特定内存段20’内为下一个当前元素提供识别密钥。
[0075]在步骤S12中,重新计算具有位于特定内存段20’的末端识别密钥之后的起始地址的在转换表10内的每个内存段20的起始地址。
[0076]为此,整个或部分转换表10可成环,并且对于每个使用的识别密钥16,可检查是否在这行特定区段20’之后分配各个内存段。如果是这样的话,那么可从在内存段20’之后分配的内存段20的每个起始地址中减去在步骤Sll中确定的特定内存段20’的总尺寸,并且重新计算的起始地址可储存在转换表10的相应域18a内。
[0077]在步骤S13中,将分配于特定内存段20’之后的内存段20朝着内存堆26的起点以在步骤Sll中确定的特定内存段20’的总尺寸移动。与在图4中的步骤S3—样,通过单次复制内存,在步骤S13中压缩内存池12,其中,可由位于终端密钥之后的下一个使用的识别密钥16提供用于进行复制的源点,可由在步骤Sll中确定的总尺寸提供尺寸,并且可由在与起始识别密钥相关联的转换密钥中的部件的起始地址提供终点。
[0078]在步骤S14中,将指向与起始识别密钥相关联的部件的在转换表10的域18d中使用的条目的引用设为在与末端识别密钥相关联的部件的域18d内的引用(或者如果末端密钥是在转换表10中的最后一个,则设为-1或“未使用的”)。
[0079]图6示出了示意性描述用于管理内存池12的方法的某些步骤的流程图。在其中,这些步骤涉及请求新内存段并且在新内存段内分配数据。
[0080]在第一步骤S20中,接收新内存段的长度。此外,通过将该长度调整为该系统的机器字,可计算新内存段的匹配的尺寸,以便防止内存池12具有任何不匹配的。
[0081]在接收新内存段的长度之后,可检查是否有足够的资源可用于进行分配。通过检查在内存池12内是否具有足够的自由空间并且检查在转换表10内是否具有至少一个未使用的识别密钥16’,可这样做。如果未满足条件,那么可返回-1,表示发生错误并且分配可退出。
[0082]在步骤S21中,在转换表10内搜索具有未使用的识别密钥16’的未使用的条目。为了优化该程序,转换表10可从最后使用的识别密钥16开始成环,并且可定位最近的未使用的识别密钥16’。如果转换表10达到末端,那么可在起点重新开始通过转换表10进行搜索。如果不可使用任何未使用的识别密钥16’,那么还可动态地扩展转换表10,并且可生成新识别密钥。
[0083]在步骤S22中,新内存段的起始地址被设为包括已经分配的内存段20的分配的内存块28的末端。换言之,新区段的起始地址被视为内存池12的连续未分配的部分30的起点。
[0084]可全局已知连续未分配的部分30的起始地址,例如,通过储存指针,或者通过将与最后使用的识别密钥16相关联的内存段20的长度加至相应的起始地址,可确定该起始地址。
[0085]在步骤S23中,与在步骤S21中找出的识别密钥相关的在域18c内的条目标记为使用的,即,可设置使用的标志。
[0086]在步骤S24中,可将数据复制到在内存池12内的新内存段中,并且通过加入在步骤S20中确定的数据的匹配的尺寸,可重新计算连续未分配的部分30的起始地址的值。
[0087]除此之外,新区段的起始地址以及匹配的尺寸可储存在与在步骤S21中找出的识别密钥相关联的转换表10的域18a、18b内。
[0088]此外,可全局已知的使用的识别密钥16的数量可增加1,并且与新内存段相关联的在步骤S21中找出的识别密钥可返回到例如客户端应用程序,以在操作时进一步参考这块数据。
[0089]必要时(S卩,如果用于新内存段的识别密钥并非在转换表中的第一个或最后一个元素),在转换表10的相应域18d内,可设置在新内存段的识别密钥与位于该密钥之前的并且所使用的识别直接位于该密钥之后的所使用的识别密钥之间的链接。
[0090]图7示出了示意性描述用于管理内存池的方法的某些步骤的流程图。在其中,这些步骤涉及请求所分配的内存段20。
[0091]在步骤S30中,接收用于所分配的内存段20的识别密钥16(例如,通过软件部件)。
[0092]重要的是,客户端软件未直接访问该存储器,并且并非旨在保持全面参考存储器,以免内存错误,这是因为先前分配的区段的删除可能移动内存内容。仅仅内存管理器访问该数据,并且根据要求,将该数据从此处复制到软件客户端中,但是不能直接访问。
[0093]在步骤S31中,根据识别密钥16,从转换表10中确定内存段20的起始地址,并且例如,软件部件可访问储存在内存段20内的数据。
[0094]该方法可分别作为编程软件模块或程序来实现;然而,本领域的技术人员会理解的是,该方法完全或部分在硬件中实现。
[0095]虽然在示图以及上述描述中详细说明和描述了本发明,但是这种说明和描述被视为具有说明性或示例性,而没有限制性;本发明不限于所公开的实施方式。通过研究示图、公开内容以及所附权利要求,本领域的技术人员通过实践所要求的发明,可理解和实现所公开的实施方式的其他变化。在权利要求中,措辞“包括”不排除其他部件或步骤,并且不定冠词“一”不排除多个。单个处理器或控制器或其他单元可实践在权利要求中叙述的几个物品的功能。在彼此不同的从属权利要求中叙述某些措施这一事实并不表示,不能利用这些措施的组合。在权利要求中的任何参考符号不应理解为限制范围。
【权利要求】
1.一种用于在划分成连续内存段(20)的内存堆(26)内管理内存池(12)的方法,所述方法包括通过: 接收特定内存段(20’ )的识别密钥(32); 根据基于所述识别密钥(32)的转换表(10)确定所述特定内存段(20’)的起始地址和尺寸;并且 将分配于所述内存池(12)内所述特定内存段(20’)的起始地址之后的内存段(20)朝着所述内存池(12)的起点以所述特定内存段(20’ )的尺寸移动,使得所述内存池(12)由连续分配的第一部分(28)和连续未分配的第二部分(30)构成, 来删除所述特定内存段(20’)。
2.根据权利要求1所述的方法, 其中,移动内存段(20’ )包括: 通过将所述特定内存段(20’)的尺寸加至所述特定内存段(20)的起始地址,来确定分配的内存块(34)的起始地址; 确定分配的内存块(34)的长度,所述分配的内存块(34)的长度是分配在所述特定内存段(20’ )之后的内存段(20)的长度的总和;以及 将所述分配的内存块(34)移动至所述特定内存段(20’ )的起始地址。
3.根据权利要求1或2所述的方法,其中,所述转换表(10)包括具有分配的内存段(20)的识别密钥(16、16’)、起始地址以及尺寸的条目(18a、18b)。
4.根据前述权利要求中任一项所述的方法,其中,删除所述特定内存段(20’)进一步包括: 重新计算所述转换表(10)内具有位于所述特定内存段(20’ )起始地址之后的起始地址的每个内存段(20)的起始地址。
5.根据前述权利要求中任一项所述的方法,其中,所述转换表(10)包括固定数量的条目,并且无论是否使用该条目,每个该条目都包括域(18c),其中,使用的条目包括对所述转换表(10)中的下一个使用的条目的引用(24)。
6.根据前述权利要求中任一项所述的方法,其中,删除所述特定内存段(20’)进一步包括: 设定所述转换表(I)中使用的条目的引用,该引用对所述特定内存段(20’ )的条目的引用进行引用,其中该使用的条目指向该特定内存段的条目。
7.根据前述权利要求中任一项所述的方法,进一步包括通过: 接收所述特定内存段(20’ )的识别密钥; 根据基于所述识别密钥的所述转换表(10)确定所述特定内存段(20’ )的总尺寸;并且 将分配于所述特定内存段(20’)之后的内存段(20)朝着所述内存池(12)的起点以所述特定内存段(20’ )的总尺寸移动, 来删除一排所述特定内存段。
8.根据前述权利要求中任一项所述的方法,进一步包括通过: 接收新内存段的长度; 将所述新内存段的起始地址设置到包括已分配内存段的分配的内存块的端部; 在所述转换表(10)中搜索未使用的条目; 生成所述新内存段的新识别密钥; 将该条目标记为使用的并且在该条目中储存所述新内存段的所述新识别密钥和起始地址, 来请求新内存段。
9.根据前述权利要求中任一项所述的方法,进一步包括通过: 接收所述分配的内存段(20)的识别密钥(16);以及 根据基于所述识别密钥(16)的所述转换表(10)确定起始地址, 来请求分配的内存段(20)。
10.一种用于管理内存池的计算机程序,在由处理器执行时,所述计算机程序适于执行根据权利要求1到9中任一项所述的方法的步骤。
11.一种计算机可读介质,在该计算机可读介质内储存根据权利要求10所述的计算机程序。
【文档编号】G06F12/02GK104461913SQ201410490049
【公开日】2015年3月25日 申请日期:2014年9月23日 优先权日:2013年9月24日
【发明者】阿德里安-雷穆斯·富尔杜伊 申请人:大陆汽车有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1