CN102541654A - 一种高效的内存管理方法和装置 - Google Patents
一种高效的内存管理方法和装置 Download PDFInfo
- Publication number
- CN102541654A CN102541654A CN2010106171212A CN201010617121A CN102541654A CN 102541654 A CN102541654 A CN 102541654A CN 2010106171212 A CN2010106171212 A CN 2010106171212A CN 201010617121 A CN201010617121 A CN 201010617121A CN 102541654 A CN102541654 A CN 102541654A
- Authority
- CN
- China
- Prior art keywords
- memory
- internal memory
- block object
- module
- internal
- 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
Images
Landscapes
- Memory System (AREA)
Abstract
本发明实施例提供一种高效的内存管理方法和装置,方法包括:扩展内存空间,分配大块内存;从分配得到的大块内存中分配获得供程序直接使用的内存小块对象;对使用完成后的内存小块进行回收及合并。统一通过内存管理软件中使用的内存,从而避免软件在运行过程中频繁的在堆栈中分配和释放内存,并通过合并机制减少内存碎片,达到对内存管理的要求。
Description
技术领域
本发明涉及视频技术领域,特别涉及一种高效的内存管理方法和装置。
背景技术
在使用C++进行软件开发过程中,对内存进行管理是非常必要的。内存管理的目的主要是有两个,一是维护程序正确性,这是一个基本的问题,因为C++语言不存在对内存自动管理的机制,程序员需要对自己定义的对象进行维护,否则可能存在内存泄漏,而让程序运行正确是软件开发最基本也是最首要的目标;另一个目的就是让程序运行得更加高效,因为在程序执行过程中,为了高效的使用内存资源,往往会根据程序运行的情况去动态的申请、使用、释放某一块内存资源,因此良好的内存管理能提高程序的运行效率,减少因为反复申请——释放操作带来的内存碎片以及时间消耗。
发明内容
本发明提供—种高效的内存管理方法和装置,用来完成内存大小的分配,使用,维护数据的一致性等工作,然后在此基础上,设计一种内存管理方法,使之能完成对使用的内存进行维护、再分配,对未使用的内存进行回收、合并等工作,二者结合来完成对内存的管理。
本发明提供一种高效的内存管理装置,包括:
内存空间扩展模块,用于从系统中申请指定大小的可供使用的内存空间,并对自身申请的内存空间进行管理和维护;
内存大块模块,用于管理一块从内存管理模块中得到的较大块内存空间,并能从这块内存空间中分配出更小的内存块供程序直接使用;
内存小块模块,用于供程序直接使用,记录内存小块模块对象的首地址信息以及空间的大小信息;
内存管理模块,用于管理程序使用的内存,管理内存的分配、回收。
本发明还提供了一种高效的内存管理方法,包括:
扩展内存空间,分配大块内存;
从分配得到的大块内存中分配获得供程序直接使用的内存小块对象;
对使用完成后的内存小块进行回收及合并。
本发明实施例具有以下优点:统一通过内存管理软件中使用的内存,从而避免软件在运行过程中频繁的在堆栈中分配和释放内存,并通过合并机制减少内存碎片,达到对内存管理的要求。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种内存管理装置的结构图;
图2为本发明实施例一种高效的内存管理方法的流程示意图;
图3为本发明实施例获得内存小块对象的流程图;
图4为本发明实施例内存小决对象回收的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,需要指出的是,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种高效的内存管理装置,包括:
内存空间扩展模块101,用于从系统中申请指定大小的可供使用的内存空间,并对自身申请的内存空间进行管理和维护,即在析构时要将申请的内存空间释放,交还给操作系统。分配内存时采用虚拟分配的方式将分配得到的 内存空间最大化使用。在分配地址空间时所分配的内存空间大小最少为1MB。
内存大块模块102,用于管理一块从内存管理模块中得到的较大块内存空间,并能从这块内存空间中分配出更小的内存块供程序直接使用,对使用完成后的内存小块进行回收、合并,同时还能记录程序使用的地址和首地址间的偏移位置信息,以及使用状态。
内存小块模块103,为本实施例内存管理装置中的最小单元,用于供程序直接使用,记录内存小块模块对象的首地址信息以及空间的大小信息,记录这个对象中保存实际数据信息的首地址位置与该对象首地址位置的偏移,能绑定、卸载、获得其保存的对象数据,标记自身的有效性等。
内存管理模块104,用于管理程序使用的内存,管理内存的分配、回收,在其空间不足时,通过内存空间扩展模块101从系统中分配指定大小的内存空间,并添加到自身的管理中;能从空余的地址空间中分配指定大小的内存大块对象,回收使用完成了的内存小块对象。
从上面描述可以看出,内存管理模块104中包含有一个或者多个内存大块模块102,并负责管理这些内存大块对象;内存大块模块102中包含有一个或者多个内存小块模块;当内存管理模块104中内存空间不足以分配出下一个内存大块对象时,可以通过内存空间扩展模块101进行扩展,即创建一个新的内存空间扩展对象,将分配得到的内存空间追加到内存管理模块104中,而供程序直接使用的是内存小块对象,对所使用的内存进行管理。
本实施例提供一种高效的内存管理方法,如图2所示,包括以下步骤:
S201,扩展内存空间,分配大块内存。
当内存管理模块104中内存空间不足以分配出下一个内存大块对象时,通过内存空间扩展模块101进行扩展,即创建一个新的内存空间扩展对象,将分配得到的内存空间追加到内存管理模块104中。
S202,从分配得到的大块内存中分配获得供程序直接使用的内存小块对象。
其中,获得内存小块对象的步骤包括:
步骤S2021:从内存管理模块中获得所有空闲的内存大块对象队列,如果不存在空闲的内存大块对象,转步骤S2023;
步骤S2022:从得到的空间的内存大块对象队列中挑选出最合适内存小块大小要求的空间的内存大块对象,然后从挑选出来的对象中分配指定大小的内存小块对象,返回给程序使用,结束;否则,转步骤S2023;
步骤S2023:从内存管理模块中生成一个新的内存大块对象,其大小为能分配出内存小块对象的最小合适大小,如果内存管理模块可供分配的空间小于指定的大小,转步骤S2024;否则,从分配的内存大块对象上分配指定大小的内存小块对象,返回给程序使用,结束。
步骤S2024:创建一个新的内存空间扩展对象,将得到的供使用的内存追加到内存管理模块中,转步骤S2023。
S203,对使用完成后的内存小块进行回收及合并。
其中,内存小块对象回收步骤:
步骤S2031:如果当前内存小块对象还被引用,不进行回收;否则转步骤S202;
步骤S2032:根据需要回收的内存小块对象,得到其所属的内存大块对象。
步骤S2033:将没有被引用的内存小块对象与内存大块对象中的剩余内存空间进行合并,组合成更大的空余块,删除该内存小块对象。如果内存大块对象的剩余大小和内存大块对象的大小相同,转步骤S2034;否则,回收步骤结束。
步骤S2034:将该内存大块对象与内存管理模块中的剩余空间进行合并,组合成更大的可供使用的内存空间,删除该内存大块对象,结束。
通过上述实施例将创建内存空间扩展对象从系统中分配内存,并将得到的内存添加到内存管理模块中,由内存管理模块进行统一管理;当内存管理模块中存在可供使用的内存空间时,可根据程序中使用情况的不同,获取合适大小的内存块供使用者使用。当程序将使用完成的内存归还时,逐层合并空闲的内存空间,从而避免软件在运行过程中频繁的在堆栈中分配和释放内存,减少系统内存碎片,达到对内存管理的要求。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
Claims (9)
1.一种高效的内存管理装置,其特征在于,包括:
内存空间扩展模块,用于从系统中申请指定大小的可供使用的内存空间,并对自身申请的内存空间进行管理和维护;
内存大块模块,用于管理一块从内存管理模块中得到的较大块内存空间,并能从这块内存空间中分配出更小的内存块供程序直接使用;
内存小块模块,用于供程序直接使用,记录内存小块模块对象的首地址信息以及空间的大小信息;
内存管理模块,用于管理程序使用的内存,管理内存的分配、回收。
2.如权利要求1所述的内存管理装置,其特征在于,所述内存大块模块还用于对使用完成后的内存小块进行回收及合并。
3.如权利要求2所述的内存管理装置,其特征在于,所述内存大块模块还用于记录程序使用的地址和首地址间的偏移位置信息,以及使用状态记录程序使用的地址和首地址间的偏移位置信息,以及使用状态。
4.如权利要求1所述的内存管理装置,其特征在于,所述内存管理模块还用于通过所述内存空间扩展模块从系统中分配指定大小的内存空间,并添加到自身的管理中。
5.如权利要求4所述的内存管理装置,其特征在于,所述内存管理模块还用于从空余的地址空间中分配指定大小的内存大块对象。
6.一种高效的内存管理方法,其特征在于,包括:
扩展内存空间,分配大块内存;
从分配得到的大块内存中分配获得供程序直接使用的内存小块对象;
对使用完成后的内存小块进行回收及合并。
7.如权利要求6所述的内存管理方法,其特征在于,所述从分配得到的大块内存中分配获得供程序直接使用的内存小块对象包括:从所有空闲的内存大块对象队列中挑选出最合适内存小块大小要求的空间的内存大块对象,然后从挑选出来的对象中分配指定大小的内存小块对象。
8.如权利要求7所述的内存管理方法,其特征在于,如果不存在空闲的内存大块对象,则生成一个新的内存大块对象,从所述新的内存大块对象上分配指定大小的内存小块对象。
9.如权利要求6所述的内存管理方法,其特征在于,所述对使用完成后的内存小块进行回收及合并包括将没有被引用的内存小块对象与所述没有被引用的内存小块对象所属的内存大块对象中的剩余内存空间进行合并,组合成更大的空余块,删除所述内存小块对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106171212A CN102541654A (zh) | 2010-12-31 | 2010-12-31 | 一种高效的内存管理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106171212A CN102541654A (zh) | 2010-12-31 | 2010-12-31 | 一种高效的内存管理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102541654A true CN102541654A (zh) | 2012-07-04 |
Family
ID=46348610
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010106171212A Pending CN102541654A (zh) | 2010-12-31 | 2010-12-31 | 一种高效的内存管理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102541654A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150257A (zh) * | 2013-02-28 | 2013-06-12 | 天脉聚源(北京)传媒科技有限公司 | 一种内存管理方法和装置 |
WO2014101422A1 (zh) * | 2012-12-27 | 2014-07-03 | 华为技术有限公司 | 一种写合并属性内存空间的分配方法及装置 |
CN105468454A (zh) * | 2015-10-21 | 2016-04-06 | 北京汉柏科技有限公司 | 基于qcow2的虚拟磁盘使用空间的计算方法、虚拟设备 |
CN106339258A (zh) * | 2016-08-10 | 2017-01-18 | 西安诺瓦电子科技有限公司 | 可编程逻辑器件与微处理器共享内存的管理方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6088777A (en) * | 1997-11-12 | 2000-07-11 | Ericsson Messaging Systems, Inc. | Memory system and method for dynamically allocating a memory divided into plural classes with different block sizes to store variable length messages |
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101470665A (zh) * | 2007-12-27 | 2009-07-01 | Tcl集团股份有限公司 | 一种无mmu平台的应用系统内存管理的方法及系统 |
CN101582051A (zh) * | 2009-06-10 | 2009-11-18 | 腾讯科技(深圳)有限公司 | 一种调整内存的方法和装置 |
-
2010
- 2010-12-31 CN CN2010106171212A patent/CN102541654A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6088777A (en) * | 1997-11-12 | 2000-07-11 | Ericsson Messaging Systems, Inc. | Memory system and method for dynamically allocating a memory divided into plural classes with different block sizes to store variable length messages |
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101470665A (zh) * | 2007-12-27 | 2009-07-01 | Tcl集团股份有限公司 | 一种无mmu平台的应用系统内存管理的方法及系统 |
CN101582051A (zh) * | 2009-06-10 | 2009-11-18 | 腾讯科技(深圳)有限公司 | 一种调整内存的方法和装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014101422A1 (zh) * | 2012-12-27 | 2014-07-03 | 华为技术有限公司 | 一种写合并属性内存空间的分配方法及装置 |
US9274940B2 (en) | 2012-12-27 | 2016-03-01 | Huawei Technologies Co., Ltd. | Method and apparatus for allocating memory space with write-combine attribute |
CN103150257A (zh) * | 2013-02-28 | 2013-06-12 | 天脉聚源(北京)传媒科技有限公司 | 一种内存管理方法和装置 |
CN105468454A (zh) * | 2015-10-21 | 2016-04-06 | 北京汉柏科技有限公司 | 基于qcow2的虚拟磁盘使用空间的计算方法、虚拟设备 |
CN106339258A (zh) * | 2016-08-10 | 2017-01-18 | 西安诺瓦电子科技有限公司 | 可编程逻辑器件与微处理器共享内存的管理方法及装置 |
CN106339258B (zh) * | 2016-08-10 | 2019-10-18 | 西安诺瓦星云科技股份有限公司 | 可编程逻辑器件与微处理器共享内存的管理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102198680B1 (ko) | 확장 가능한 멀티-스테이지 데이터 처리 시스템들에서의 효율적인 데이터 캐싱 관리 | |
CN101221536B (zh) | 嵌入式系统的内存管理方法及装置 | |
CN101859279B (zh) | 一种内存分配、释放方法及装置 | |
CN101266575B (zh) | 一种提高内存池利用率的方法 | |
US9411650B2 (en) | Ledger-based resource tracking | |
CN102279730A (zh) | 一种并行的数据处理方法、装置和并行的数据处理系统 | |
CN108038002A (zh) | 一种嵌入式软件内存管理方法 | |
CN105027093A (zh) | 用于压缩和紧凑虚拟存储器的方法和装置 | |
CN102946413B (zh) | 虚拟机调度和执行部署过程中的资源预处理方法及系统 | |
CN102591789B (zh) | 存储空间回收方法及装置 | |
CN109213555A (zh) | 一种面向虚拟桌面云的资源动态调度方法 | |
CN105988874A (zh) | 资源处理方法及装置 | |
CN102855193A (zh) | 非易失性存储系统中未使用的逻辑地址的挂载时去映射 | |
CN104731799A (zh) | 内存数据库管理装置 | |
CN103593229A (zh) | 异构云操作系统的集成与统一调度框架及调度方法 | |
CN102541654A (zh) | 一种高效的内存管理方法和装置 | |
CN102043859A (zh) | 数据更新方法及装置 | |
CN103577329A (zh) | 一种快照管理方法和装置 | |
CN110750372B (zh) | 基于共享内存的日志系统及日志管理方法 | |
CN109271110A (zh) | 存储系统中存储数据的写入方法、写入系统及相关装置 | |
CN103218305A (zh) | 存储空间的分配方法 | |
CN101968772A (zh) | 嵌入式系统高效内存池的实现方法 | |
CN103793332B (zh) | 基于内存的数据存储方法、装置、处理器和电子设备 | |
CN104636199A (zh) | 一种基于分布式内存计算的大数据实时处理系统及方法 | |
CN107133182A (zh) | 一种内存管理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120704 |
|
RJ01 | Rejection of invention patent application after publication |