CN106598736A - 一种内存池的内存块调用方法和释放方法及服务器 - Google Patents
一种内存池的内存块调用方法和释放方法及服务器 Download PDFInfo
- Publication number
- CN106598736A CN106598736A CN201611146281.7A CN201611146281A CN106598736A CN 106598736 A CN106598736 A CN 106598736A CN 201611146281 A CN201611146281 A CN 201611146281A CN 106598736 A CN106598736 A CN 106598736A
- Authority
- CN
- China
- Prior art keywords
- memory
- round
- block
- block address
- robin queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本发明实施方式公开了一种内存池的内存块调用方法和释放方法及服务器。该内存池的内存块调用方法包括:申请内存池中的内存块,所述内存池初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址;从循环队列中取出最先被存入的内存块地址;以及根据所述取出的内存块地址,调用对应的内存块。采用此内存池的内存块调用方法可以减少额外内存消耗,提升内存分配效率。
Description
技术领域
本发明实施方式涉及计算机应用领域,特别是涉及一种内存池的内存块调用方法和内存块释放方法及服务器。
背景技术
在计算机软件开发和应用过程中,经常会用到动态申请内存与释放内存,当频繁使用软件时会造成大量的内存碎片并进而降低内存分配效率。目前,内存池是一种特殊的内存管理方式,与常规的内存管理相比较,其特点是每次分配使用的内存块大小是相同的,这种内存管理方式具有分配效率高,不会产生内存碎片的优点,常常应用在对内存分配效率要求较高,申请内存的大小固定的场合。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。
现有的内存池管理方法通常采用链表的管理方式,将内存块的地址保存到一个链表里面,应用程序申请内存时从链表中查找可用内存块的地址,然后调用对应的内存块。这种方法需要逐个查找链表,额外内存消耗较多,在处理链表结点连接时也还有改进空间。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:现有内存池管理方法,应用程序每次申请内存时需要查找整个链表,额外内存消耗多,内存分配效率低。
发明内容
为解决上述技术问题,减少额外内存消耗,提升内存分配效率,本发明实施方式采用的一个技术方案是:提供一种内存池内存申请方法,该方法包括:申请内存池中的内存块,所述内存池初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址;从循环队列中取出最先被存入的内存块地址;以及根据所述取出的内存块地址,调用对应的内存块。
其中,所述从循环队列中取出最先被存入的内存块地址步骤之前,进一步包括:判断循环队列中的内存块地址是否为空;若是,返回空指针。
其中,所述内存池中的内存块数量与循环队列中包含的内存块地址数量相同。
其中,所述内存池初始化时循环队列中的若干个内存块地址为连续的内存块地址。
为解决上述技术问题,减少额外内存消耗,提升内存分配效率,本发明实施方式采用的另一个技术方案是:提供一种内存池内存释放方法,包括:释放内存池的内存块,所述内存池初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址;以及将释放内存块对应的内存块地址放入所述循环队列的尾部。
其中,所述内存池中的内存块数量与循环队列中包含的内存块地址数量相同。
其中,所述内存池初始化时循环队列中的若干个内存块地址为连续的内存块地址。
为解决上述技术问题,减少额外内存消耗,提升内存分配效率,本发明实施方式采用的另一个技术方案是:提供一种服务器,包括:应用程序运行单元和内存池,所述应用程序运行单元,用于向所述内存池发起申请内存块请求;所述内存池初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址;所述内存池用于接收所述申请内存块请求,从循环队列中取出最先被存入的内存块地址;以及根据所述取出的内存块地址,调用对应的内存块。
其中,所述内存池中的内存块数量与循环队列中包含的内存块地址数量相同。
其中,所述内存池初始化时循环队列中的若干个内存块地址为连续的内存块地址。
本发明实施方式的有益效果是:内存池中的N个内存块,使用一个循环队列管理,申请内存块时,按照循环队列先入先出的原则,直接返回最先放入的内存块地址,调用对应的内存块,省去了现有技术查找链表的过程;此外,释放内存时,直接将内存块地址放入循环队列的尾部,无需判断队列是否已满,循环列队本身不需要消耗过多的性能。因此,可以明显减少额外的内存开销,提升内存分配效率。
附图说明
图1是本发明实施方式提供的一种内存池的组成结构示意图;
图2是本发明实施方式提供的一种内存池初始化方法的流程示意图;
图3是本发明实施方式提供的一种内存池的内存块调用方法的流程示意图;
图4是本发明实施方式提供的一种内存池的内存块释放方法的流程示意图;
图5是本发明实施方式提供的一种服务器的组成结构示意图。
具体实施方式
如图1所示,为本发明实施方式提供的一种内存池的组成结构示意图。内存池100初始化时,产生若干个大小相同的空闲内存块10和一个循环队列20。所述循环队列20用于管理所述若干个内存块10,内存池100初始化时,依次将上述若干个内存块10的地址依次放入循环队列20中,最先被放入的内存块地址,最先被取出使用。内存块10释放后,对应内存块10的地址放回队列尾部。循环队列20中的内存块地址数量与内存块10数量一致。在应用程序申请内存时,从循环队列20中取出最先放入的内存块地址,释放内存时把内存块地址放入循环队列20尾部。
如图2所示,为本发明实施方式提供的一种内存池初始化方法的流程示意图。
步骤S1001:根据应用程序请求,确定内存池100中内存块10的大小S和数量N;
步骤S1002:分配N个大小为S的空闲内存块10;
步骤S1003:根据内存块10的数量N,创建一个长度为N的循环队列20;
步骤S1004:将N个连续的内存块地址放入循环队列20中。
如图3所示,为本发明实施方式提供的一种内存池的内存块调用方法的流程示意图。
步骤S2001:应用程序开始申请内存池100中的内存块10;
所述内存池100中包括N个内存块10和一个循环队列20,该循环队列20中包括对应N个内存块10的N个内存块地址,其中,内存块10数量与内存块地址数量相同。
步骤S2002:判断循环队列20中的内存块地址是否为空,即判断是否所有的内存块10均已被调用;若是,执行步骤S2003;若否,执行步骤S2004;
步骤S2003:返回空指针给应用程序;该流程结束。
步骤S2004:从循环队列20中取出内存块地址;此时,最先被存入的内存块地址被取出;
步骤S2005:返回取出的内存块地址给应用程序;
步骤S2006:应用程序调用内存块地址对应的内存块10;该流程结束。
如图4所示,为本发明实施方式提供的一种内存池的内存块释放方法的流程示意图。
步骤S3001:应用程序释放内存块10开始;
步骤S3002:将释放内存块10对应的内存块地址放入循环队列20的尾部。
由于循环队列20的长度可以满足所有内存块地址的存放,无需判断循环队列20是否已满,直接将要释放的内存块地址放入循环队列20的尾部即可。
如图5所示,为本发明实施方式提供的服务器的组成结构示意图。服务器200包括应用程序运行单元210和内存池220,可以实现上述如图1至图4所述的内存池的管理方法。应用程序运行单元210用于向内存池220发起申请内存块请求。内存池220初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址。内存池220用于接收申请内存块请求,从循环队列中取出最先被存入的内存块地址;以及根据所述取出的内存块地址,调用对应的内存块。内存池220中的内存块数量与循环队列中包含的内存块地址数量相同。内存池220初始化时循环队列中的若干个内存块地址为连续的内存块地址。
本发明实施方式的有益效果是:内存池中的N个内存块,使用一个循环队列管理,申请内存块时,按照循环队列先入先出的原则,直接返回最先放入的内存块地址,调用对应的内存块,省去了现有技术查找链表的过程;此外,释放内存时,直接将内存块地址放入循环队列的尾部,无需判断队列是否已满,循环列队本身不需要消耗过多的性能。因此,可以明显减少额外的内存开销,提升内存分配效率。
以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种内存池的内存块调用方法,其特征在于,包括:
申请内存池中的内存块,所述内存池初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址;
从循环队列中取出最先被存入的内存块地址;以及
根据所述取出的内存块地址,调用对应的内存块。
2.根据权利要求1所述的方法,其特征在于,所述从循环队列中取出最先被存入的内存块地址步骤之前,进一步包括:判断循环队列中的内存块地址是否为空;若是,返回空指针。
3.根据权利要求1所述的方法,其特征在于,所述内存池中的内存块数量与循环队列中包含的内存块地址数量相同。
4.根据权利要求1所述的方法,其特征在于,所述内存池初始化时循环队列中的若干个内存块地址为连续的内存块地址。
5.一种内存池的内存块释放方法,其特征在于,包括:
释放内存池的内存块,所述内存池初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址;以及
将释放内存块对应的内存块地址放入所述循环队列的尾部。
6.根据权利要求5所述的方法,其特征在于,所述内存池中的内存块数量与循环队列中包含的内存块地址数量相同。
7.根据权利要求5所述的方法,其特征在于,所述内存池初始化时循环队列中的若干个内存块地址为连续的内存块地址。
8.一种服务器,包括:应用程序运行单元和内存池,其特征在于,
所述应用程序运行单元,用于向所述内存池发起申请内存块请求;
所述内存池初始化时包括若干个大小相同的空闲内存块和一个循环队列,所述循环队列存储有若干个与内存块对应的内存块地址;所述内存池,用于接收所述申请内存块请求,从循环队列中取出最先被存入的内存块地址;以及根据所述取出的内存块地址,调用对应的内存块。
9.如权利要求8所述的服务器,其特征在于,所述内存池中的内存块数量与循环队列中包含的内存块地址数量相同。
10.如权利要求8所述的服务器,其特征在于,所述内存池初始化时循环队列中的若干个内存块地址为连续的内存块地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611146281.7A CN106598736A (zh) | 2016-12-13 | 2016-12-13 | 一种内存池的内存块调用方法和释放方法及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611146281.7A CN106598736A (zh) | 2016-12-13 | 2016-12-13 | 一种内存池的内存块调用方法和释放方法及服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106598736A true CN106598736A (zh) | 2017-04-26 |
Family
ID=58801066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611146281.7A Pending CN106598736A (zh) | 2016-12-13 | 2016-12-13 | 一种内存池的内存块调用方法和释放方法及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598736A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766153A (zh) * | 2017-10-17 | 2018-03-06 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN109144891A (zh) * | 2018-07-20 | 2019-01-04 | 新华三技术有限公司 | 一种数据存储方法和装置 |
CN109582597A (zh) * | 2018-11-02 | 2019-04-05 | 广东工业大学 | 一种基于mic架构处理器的内存管理系统 |
CN111404986A (zh) * | 2019-12-11 | 2020-07-10 | 杭州海康威视系统技术有限公司 | 数据传输处理方法、设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978893A (en) * | 1996-06-19 | 1999-11-02 | Apple Computer, Inc. | Method and system for memory management |
CN1996258A (zh) * | 2006-12-28 | 2007-07-11 | 武汉虹旭信息技术有限责任公司 | 一种动态内存池的实现方法 |
CN102279810A (zh) * | 2011-08-11 | 2011-12-14 | 浪潮(北京)电子信息产业有限公司 | 一种网络存储服务器及其缓存数据的方法 |
CN102521279A (zh) * | 2011-11-25 | 2012-06-27 | Tcl集团股份有限公司 | 一种流媒体文件播放方法、系统及播放器 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
-
2016
- 2016-12-13 CN CN201611146281.7A patent/CN106598736A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978893A (en) * | 1996-06-19 | 1999-11-02 | Apple Computer, Inc. | Method and system for memory management |
CN1996258A (zh) * | 2006-12-28 | 2007-07-11 | 武汉虹旭信息技术有限责任公司 | 一种动态内存池的实现方法 |
CN102279810A (zh) * | 2011-08-11 | 2011-12-14 | 浪潮(北京)电子信息产业有限公司 | 一种网络存储服务器及其缓存数据的方法 |
CN102521279A (zh) * | 2011-11-25 | 2012-06-27 | Tcl集团股份有限公司 | 一种流媒体文件播放方法、系统及播放器 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766153A (zh) * | 2017-10-17 | 2018-03-06 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN109144891A (zh) * | 2018-07-20 | 2019-01-04 | 新华三技术有限公司 | 一种数据存储方法和装置 |
CN109582597A (zh) * | 2018-11-02 | 2019-04-05 | 广东工业大学 | 一种基于mic架构处理器的内存管理系统 |
CN111404986A (zh) * | 2019-12-11 | 2020-07-10 | 杭州海康威视系统技术有限公司 | 数据传输处理方法、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598736A (zh) | 一种内存池的内存块调用方法和释放方法及服务器 | |
CN1983196B (zh) | 用于将执行线程分组的系统和方法 | |
CN1271524C (zh) | 一种静态内存管理方法 | |
CN101702138B (zh) | 一种内存管理方法、系统及服务器 | |
CN101320351A (zh) | 内存的分配、清理和释放方法及内存管理的装置 | |
CN109690498B (zh) | 内存管理方法和设备 | |
CN107783812B (zh) | 虚拟机内存管理方法及装置 | |
CN1996258A (zh) | 一种动态内存池的实现方法 | |
CN108038002A (zh) | 一种嵌入式软件内存管理方法 | |
CN108132842A (zh) | 一种嵌入式软件内存管理系统 | |
WO2011079748A1 (zh) | 链表的创建方法及系统、数据的查找方法及系统 | |
CN107544756B (zh) | 基于SCM的Key-Value日志型本地存储方法 | |
CN1197955A (zh) | 管理共享内存的方法 | |
CA2630594A1 (en) | Expansion of a stacked register file using shadow registers | |
CN102063338A (zh) | 一种请求独占资源的方法及装置 | |
CN103399856A (zh) | 面向scada系统的爆发式数据缓存处理系统及其方法 | |
CN105843748A (zh) | 一种对内存中内存页的处理方法及装置 | |
CN103218305A (zh) | 存储空间的分配方法 | |
CN107783908A (zh) | 一种基于Linux内核内存泄露的检测方法 | |
CN102279810A (zh) | 一种网络存储服务器及其缓存数据的方法 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
CN104077266B (zh) | 多内核操作系统实现方法和实现装置及系统 | |
CN106383742A (zh) | 一种基于linux的IO调度方法 | |
CN104536773B (zh) | 基于内存扫描的嵌入式软件动态内存回收方法 | |
CN104850505A (zh) | 基于链式堆叠的内存管理方法与系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170426 |
|
RJ01 | Rejection of invention patent application after publication |