一种内存池的管理方法、装置、设备及可读存储介质

著录项
  • CN201811308495.9
  • 20181105
  • CN109388497A
  • 20190226
  • 郑州云海信息技术有限公司
  • 邹虎
  • G06F9/50
  • G06F9/50

  • 河南省郑州市郑东新区心怡路278号16层1601室
  • 河南(41)
  • 北京集佳知识产权代理有限公司
  • 罗满
摘要
本发明公开了一种内存池的管理方法、装置、设备以及计算机可读存储介质,包括:响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求;判断所述应用程序是否申请到可用内存;若否,则将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存。利用本发明所提供的内存池的管理方法、装置、设备以及计算机可读存储介质,保证了在没有内存的情况下应用程序的线程不会陷入无止境的循环查询内存中,节省了CPU的效率,提高了应用程序的响应速度。
权利要求

1.一种内存池的管理方法,其特征在于,包括:

响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求;

判断所述应用程序是否申请到可用内存;

若否,则将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

2.如权利要求1所述的方法,其特征在于,所述将所述应用程序申请预选内存池中内存的操作封装为一个内存请求包括:

将所述应用程序申请预选内存池中内存的操作封装为一个内存请求,并在所述内存请求内建立一个链表node。

3.如权利要求2所述的方法,其特征在于,所述若否,则将所述内存请求挂载至所述内存池的等待列队中包括:

若所述应用程序未申请到可用内存时,将所述应用程序的内存请求的链表node挂载到所述内存池预先建立的链表head上,以便于所述应用程序进入静默状态。

4.如权利要求3所述的方法,其特征在于,所述将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存包括:

将所述应用程序的链表node挂载在所述内存池的链表head中,当所述内存池内有内存空间释放时,产生新的可用内存;

判断所述内存池的链表head上是否存在挂载的所述内存请求;

若存在,则激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

5.如权利要求1所述的方法,其特征在于,所述响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求还包括:

在存储系统内划分出供应用程序使用的内存池,以便于所述应用程序在所述内存池中申请一块预设大小的内存使用。

6.一种内存池的管理装置,其特征在于,包括:

封装模块,用于响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求;

判断模块,用于判断所述应用程序是否申请到可用内存;

激活模块,用于若所述应用程序未申请到可用内存,则将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

7.如权利要求6所述的装置,其特征在于,所述封装模块具体用于:

将所述应用程序申请预选内存池中内存的操作封装为一个内存请求,并在所述内存请求内建立一个链表node。

8.如权利要求7所述的装置,其特征在于,所述激活模块具体用于:

若所述应用程序未申请到可用内存时,将所述应用程序的内存请求的链表node挂载到所述内存池预先建立的链表head上,以便于所述应用程序进入静默状态。

9.一种内存池的管理设备,其特征在于,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如权利要求1至5任一项所述一种内存池的管理方法的步骤。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述一种内存池的管理方法的步骤。

说明书
技术领域

本发明涉及计算机存储技术领域,特别是涉及一种内存池的管理方法、装置、设备以及计算机可读存储介质。

在应用程序开发中,通常需要在栈上申请内存来使用。例如采用malloc等函数进行申请,申请成功后应用程序才可以使用这块内存继续进行处理。通常情况下,对于一般的应用程序来说,由于操作系统会在底层提供虚拟内存管理,所以很难出现申请不到内存的情况。但是对于某些特殊场合,比如使用预先申请好的内存Pool,以及在其他程序将大部分内存都使用了的情况。

通常的做法中,如果调用malloc等函数进行内存申请失败后,会返回一个-1的返回码,告诉应用程序暂时没有内存,应用程序这时候需要针对没有内存的场景进行处理,等待一段时间然后再进行重试。类似应用程序需要做一个轮训的功能,轮训对于需要高响应速度的应用程序来说效率非常低,同时频繁的轮训也会影响CPU的使用效率。综上所述可以看出,如何在没有内存的情况下使应用程序的线程不会陷入无止境的循环查询内存是目前有待解决的问题。

本发明的目的是提供一种内存池的管理方法、装置、设备以及计算机可读存储介质,以解决现有技术中在没有内存的情况下应用程序的线程会陷入无止境的循环查询内存的操作,造成应用程序的响应速度低、CPU使用效率低的问题。

为解决上述技术问题,本发明提供一种内存池的管理方法,包括:响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求;判断所述应用程序是否申请到可用内存;若否,则将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

优选地,所述将所述应用程序申请预选内存池中内存的操作封装为一个内存请求包括:

将所述应用程序申请预选内存池中内存的操作封装为一个内存请求,并在所述内存请求内建立一个链表node。

优选地,所述若否,则将所述内存请求挂载至所述内存池的等待列队中包括:

若所述应用程序未申请到可用内存时,将所述应用程序的内存请求的链表node挂载到所述内存池预先建立的链表head上,以便于所述应用程序进入静默状态。

优选地,所述将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存包括:

将所述应用程序的链表node挂载在所述内存池的链表head中,当所述内存池内有内存空间释放时,产生新的可用内存;

判断所述内存池的链表head上是否存在挂载的所述内存请求;

若存在,则激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

优选地,所述响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求还包括:

在存储系统内划分出供应用程序使用的内存池,以便于所述应用程序在所述内存池中申请一块预设大小的内存使用。

本发明还提供了一种内存池的管理装置,包括:

封装模块,用于响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求;

判断模块,用于判断所述应用程序是否申请到可用内存;

激活模块,用于若所述应用程序未申请到可用内存,则将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

优选地,所述封装模块具体用于:

将所述应用程序申请预选内存池中内存的操作封装为一个内存请求,并在所述内存请求内建立一个链表node。

优选地,所述激活模块具体用于:

若所述应用程序未申请到可用内存时,将所述应用程序的内存请求的链表node挂载到所述内存池预先建立的链表head上,以便于所述应用程序进入静默状态。

本发明还提供了一种内存池的管理设备,包括:

存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述一种内存池的管理方法的步骤。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述一种内存池的管理方法的步骤。

本发明所提供的内存池的管理方法,响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求。在所述应用程序没有申请到可用内存时,即所述预选内存池中没有足够的可用内存,则将所述内存请求挂载在所述内存池的等待队列中,这样应用程序就在申请不到内存时进入了静默状态,不会因为轮训而浪费CPU的利用率。当所述内存池中有新的内存空间释放时,即所述内存池内有可用内存时,激活并执行所述内存请求,为所述应用程序分配可用内存。本发明所提供的内存池管理技术,将现有技术中申请内存的轮训机制修改为中断机制,不会在所述应用程序未申请到内存时,造成对CPU使用资源的浪费;提高了应用程序的响应速度。

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明所提供的内存池的管理方法的第一种具体实施例的流程图;

图2为本发明所提供的内存池的管理方法的第二种具体实施例的流程图;

图3为本发明实施例提供的一种内存池的管理装置的结构框图。

本发明的核心是提供一种内存池的管理方法、装置、设备以及计算机可读存储介质,节省了CPU的效率,提高了应用程序的响应速度。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图1,图1为本发明所提供的内存池的管理方法的第一种具体实施例的流程图;具体操作步骤如下:

步骤S101:响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求;

预先在存储系统内划分出可供该应用程序使用的内存池;应用程序所有使用的内存都从所述内存池中申请一块固定大小的内存使用。

在本实施例中,将所述应用程序申请所述内存池中内存的操作封装为一个内存请求request;并在所述内存请求request内建立一个链表的node。在所述内存池内建立一个链表的head。

步骤S102:判断所述应用程序是否申请到可用内存;

当所述应用程序时申请到所述内存池中的可用内存,则不做任何处理。

步骤S103:若否,则将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

若所述应用程序未申请到可用内存,则将所述应用程序的链表node挂载在所述内存池的链表head上。且所述应用程序在申请不到的内存时就进入了静默状态。在程序的其他线程处理完自己的任务后,会进行内存的释放,这个时候所述内存池就有新的可用内存可以分配了,从而激过并执行所述应用程序的内存请求,为所述应用程序分配可用内存。本实施例所提供的内存池的管理方法,大大提高了申请内存的效率以及程序的响应速度。

基于上述实施例,在本实施例中,在所述应用程序未申请到可用内存时,将所述应用程序的链表node挂载在所述内存池的链表head中。当所述内存池内有内存空间释放时,产生新的可用内存;判断所述内存池的链表head上是否存在挂载的所述内存请求;若是,则激活并执行所述内存请求。请参考图2,图2为本发明所提供的内存池的管理方法的第二种具体实施例的流程图。具体操作步骤如下:

步骤S201:响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求,并在所述内存请求内建立一个链表node;

步骤S202:判断所述应用程序是否申请到可用内存;

步骤S203:若所述应用程序未申请到可用内存时,将所述应用程序的内存请求的链表node挂载到所述内存池预先建立的链表head上,以便于所述应用程序进入静默状态;

步骤S204:当所述内存池内有内存空间释放,产生新的可用内存时,判断所述内存池的链表head上是否存在挂载的所述内存请求;

步骤S205:若存在,则激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

本实施例所提供的方法,为每个内存区域保存一个链表,在内存不足的时候将应用程序的请求作为一个内存请求request挂在这个链表上。当有新的内存释放时,内存模块从这个链表上拿一个request下来,通知对应的应用程序继续执行。这样就相当将原本的轮训机制修改为中断机制,大大提高了在应用程序等待内存的效率。且在有可用内存的时候,可以瞬时通知到正在等待的应用程序,提高程序的响应速度。

请参考图3,图3为本发明实施例提供的一种内存池的管理装置的结构框图;具体装置可以包括:

封装模块100,用于响应于应用程序的内存申请,将所述应用程序申请预选内存池中内存的操作封装为一个内存请求;

判断模块200,用于判断所述应用程序是否申请到可用内存;

激活模块300,用于若所述应用程序未申请到可用内存,则将所述内存请求挂载至所述内存池的等待列队中,以便所述内存池中有内存空间释放时,激活并执行所述内存请求,从而为所述应用程序申请到可用内存。

本实施例的内存池的管理装置用于实现前述的内存池的管理方法,因此内存池的管理装置中的具体实施方式可见前文中的内存池的管理方法的实施例部分,例如,封装模块100,判断模块200,激活模块300,分别用于实现上述内存池的管理方法中步骤S101,S102和S103,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。

本发明具体实施例还提供了一种内存池的管理设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述一种内存池的管理方法的步骤。

本发明具体实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述一种内存池的管理方法的步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的内存池的管理方法、装置、设备以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

本文发布于:2024-09-25 20:21:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/85684.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议