一种堆空间的内存分配管理方法技术

技术编号:15649806 阅读:53 留言:0更新日期:2017-06-17 02:41
本发明专利技术提供了一种堆空间的内存分配管理方法,包括:创建堆空间;根据应用配置的至少一个典型长度和数据块数量在堆空间内创建内存池,内存池中为带有对应数据块数量的至少一个典型长度内存空间的节点和各典型长度的链表集,内存池中各节点的节点头压入典型长度对应的链表集;根据应用配置的静态或动态属性确定节点的静态或动态属性,内存池的链表集包括正在使用动态节点链表、正在使用静态节点链表和已经释放动态节点链表。本发明专利技术实现了每个堆空间根据需求可创建多个典型长度,解决了堆空间管理上碎片化的问题,对静态、动态节点的分开管理,降低系统任务被其他越界内存修改的概率。

【技术实现步骤摘要】
一种堆空间的内存分配管理方法
本专利技术涉及内存堆领域,尤其涉及一种堆空间的内存分配管理方法。
技术介绍
目前,嵌入式在数字信号处理系统中已经广泛应用,特别是多核DSP芯片,如何实现对多核DSP内存堆高效管理、可靠应用已成为多核DSP实时嵌入式系统开发的一个技术点。目前在嵌入式系统应用的内存堆,大多以C语言标准库自带malloc/free函数,实现内存申请或者释放。然而会出现很多问题,例如效率不能满足实时嵌入式操作系统中对内存堆高性能的要求,例如,在堆上,释放内存时,将内存释放到整个内存池中,当再次是申请时还是通过malloc,这样碎片化比较严重,且此过程比较耗时效率较低等不足之处,对于使用者也难于维护,例如,在系统运行过程中会不停的有内存的申请释放,无法实时监控堆的使用情况。
技术实现思路
本专利技术提供了一种堆空间的内存分配管理方法,包括:创建堆空间;根据应用配置的至少一个典型长度和各典型长度的数据块数量在所述堆空间内创建内存池,所述内存池中为带有对应数据块数量的所述至少一个典型长度内存空间的节点和各典型长度的链表集,所述内存池中各节点的节点头压入所述典型长度对应的链表集;根据应用配置的静态或动态属性确定所述节点的静态或动态属性,所述内存池的链表集包括正在使用动态节点链表、正在使用静态节点链表和已经释放动态节点链表。优选的,所述创建堆空间,具体为:若应用配置的堆空间信息包括私有堆属性标志,则在核内私有存储区域内创建堆空间;若应用配置的堆空间信息包括共享堆属性标志,则在核内共享存储区域内创建堆空间。优选的,所述根据应用配置的静态或动态属性确定所述节点的静态或动态属性之后,还包括:获得应用向所述堆空间申请内存的请求;确定所述申请内存小于等于所述堆空间的最大典型长度,则判断所述堆空间中与申请内存长度匹配的典型长度的已经释放动态节点链表中是否有节点头;若是,则将已经释放动态节点链表中节点头所在节点的内存地址返回给应用,将所述节点头从已经释放动态节点链表压入到正在使用动态节点链表;若否,则在堆空间内未使用的内存空间建立带有申请内存长度的内存空间的新节点,将新节点的内存地址返回给应用,将新节点的节点头压入申请内存长度的链表集。优选的,所述节点由顺序排列的节点头、返回给应用的内存空间和预设长度的节点尾三部分组成,返回给应用的内存空间的长度与所述典型长度相同。优选的,所述获得应用向所述堆空间申请内存的请求之后,还包括,判断所述堆空间是否在共享区域,若是,则加自旋锁,若否,则关中断直至内存申请成功。优选的,所述根据应用配置的典型长度和典型数据块个数在所述堆空间内创建带有所述典型长度内存空间的节点的内存池之后,还包括:获取应用对所述堆空间内存的释放请求;判断内存释放请求中的释放内存地址对应节点是动态节点还是静态节点,若是动态节点,则将节点从所述正在使用动态节点链表中移除,并添加到已经释放的动态节点链表中;若是静态节点,确定内存释放请求中的释放内存地址对应节点是静态节点,则返回错误信息给应用。优选的,所述获取应用对所述堆空间内存的释放请求之后,还包括,判断所述堆空间是否在共享区域,若是,则加自旋锁,若否,则关中断直至内存释放成功。与现有技术相比,本专利技术提供的一种堆空间的内存分配管理方法具有以下有益效果:本专利技术通过应用来配置所述节点的静态或动态属性,实现了对静态、动态节点的分开管理,其次在每个典型长度申请、释放的节点由正在使用动态节点链表,正在使用静态节点链表和已经释放动态节点链表维护,其优势是提高申请、释放内存的效率,减小节点入队或者出队时耗时,能够在一定程度上提高堆管理的效率,一般静态节点都用于操作系统的任务,信号量等,与动态节点分开,降低被其他越界内存修改的概率,在一定程度增加系统的可靠性。每个堆空间根据需求可创建多个典型长度,解决了堆空间管理上碎片化的问题,同时可以很快定位出个别典型长度的内存出了问题,节点构成,根据典型长度开辟一片内存,以节点头开始紧跟返回给用户的空间,以节点尾结束,为每个节点设计了边界,如果用户填写的数据越界踩其他节点,节点尾的标志有助于定位问题。附图说明图1是本专利技术提供的一种堆空间的内存分配管理方法第一个实施例的的方法流程图。图2是本专利技术提供的一种堆空间的内存分配管理方法第二个实施例的方法流程图的方法流程图一。图3是本专利技术提供的一种堆空间的内存分配管理方法第二个实施例的方法流程图的方法流程图二。图4是本专利技术提供的一种堆空间的内存分配管理系统第一个实施例的结构框图。图5是本专利技术提供的一种堆空间的内存分配管理系统第二个实施例的结构框图一。图6是本专利技术提供的一种堆空间的内存分配管理系统第二个实施例的结构框图二。图7是本专利技术提供的一种堆空间的内存分配管理系统第二个实施例的结构框图三。图8是本专利技术提供的实施例中实例1的方法流程图。图9是本专利技术提供的实施例中实例2的方法流程图。图10是本专利技术提供的实施例中实例3的方法流程图。图11是本专利技术提供的实施例中实例4的方法流程图。具体实施方式为使本专利技术解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本专利技术实施例的技术方案作进一步的详细描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1示出根据本专利技术提供的一种堆空间的内存分配管理方法第一个实施例的方法流程图。本实施例的一种堆空间的内存分配管理方法主要由一种堆空间的内存分配方系统来执行,该系统可以设置在嵌入式芯片中,如DSP芯片,当然也可以设置在其他包含CPU的芯片中。该方法包括以下步骤:S11:创建堆空间。具体的,在内存中定义一块未被占用的内存空间作为堆空间。例如:在内存中定义一块未被占用的内存空间作为堆空间A。当在多核芯片中创建堆空间时,应用配置的堆空间信息包括私有堆属性标志,则在核内私有存储区域内创建堆空间;应用配置的堆空间信息包括共享堆属性标志,则在核内共享存储区域内创建堆空间。内存域根据CACHE属性又分为具有CACHE属性域和不具有CACHE属性域,一般情况下,具有CACHE属性域则可以为核内私有存储区域,不具有CACHE属性域为核内共享存储区域,使本专利技术的内存堆管理配置灵活,满足由使用者指定堆的位置需求。S12:根据应用配置的至少一个典型长度和各典型长度的数据块数量在堆空间内创建内存池,内存池中为带有对应数据块数量的至少一个典型长度内存空间的节点和各典型长度的链表集,内存池中各节点的节点头压入典型长度对应的链表集。其中,应用配置的典型长度可以为一种,也可以为多种。如上例,应用配置了第一典型长度108B和第二典型长度236B根据应用配置的第一典型长度为108B,第一典型长度的数据块数量为m个,在之前创建好的堆空间A中建立m个带有108B内存空间的节点,应用又配置了第二典型长度为236B,第二典型长度的数据块数量为n个,则在之前创建好的堆空间A中建立m个带有108B内存空间的节点,该带有108B内存空间的节点的节点头压入在内存池B1的链表集b1,该带有108B内存空间的节点的节点头压入内存池B1的链表集b2,这些带有108B本文档来自技高网...
一种堆空间的内存分配管理方法

【技术保护点】
一种堆空间的内存分配管理方法,其特征在于,包括:创建堆空间;根据应用配置的至少一个典型长度和各典型长度的数据块数量在所述堆空间内创建内存池,所述内存池中为带有对应数据块数量的所述至少一个典型长度内存空间的节点和各典型长度的链表集,所述内存池中各节点的节点头压入所述典型长度对应的链表集;根据应用配置的静态或动态属性确定所述节点的静态或动态属性,所述内存池的链表集包括正在使用动态节点链表、正在使用静态节点链表和已经释放动态节点链表。

【技术特征摘要】
1.一种堆空间的内存分配管理方法,其特征在于,包括:创建堆空间;根据应用配置的至少一个典型长度和各典型长度的数据块数量在所述堆空间内创建内存池,所述内存池中为带有对应数据块数量的所述至少一个典型长度内存空间的节点和各典型长度的链表集,所述内存池中各节点的节点头压入所述典型长度对应的链表集;根据应用配置的静态或动态属性确定所述节点的静态或动态属性,所述内存池的链表集包括正在使用动态节点链表、正在使用静态节点链表和已经释放动态节点链表。2.如权利要求1所述的方法,其特征在于,所述创建堆空间,具体为:若应用配置的堆空间信息包括私有堆属性标志,则在核内私有存储区域内创建堆空间;若应用配置的堆空间信息包括共享堆属性标志,则在核内共享存储区域内创建堆空间。3.如权利要求1所述的方法,其特征在于,所述根据应用配置的静态或动态属性确定所述节点的静态或动态属性之后,还包括:获得应用向所述堆空间申请内存的请求;确定所述申请内存小于等于所述堆空间的最大典型长度,则判断所述堆空间中与申请内存长度匹配的典型长度的已经释放动态节点链表中是否有节点头;若是,则将已经释放动态节点链表中节点头所在节点的内存地址返回给应用,将所述节点头从已经释放动态节点链表压入到正在使用动态节点链表;若否,则...

【专利技术属性】
技术研发人员:宋春光
申请(专利权)人:北京信威通信技术股份有限公司
类型:发明
国别省市:北京,11

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

1