本发明专利技术实施例提供一种高效的内存管理方法和装置,方法包括:扩展内存空间,分配大块内存;从分配得到的大块内存中分配获得供程序直接使用的内存小块对象;对使用完成后的内存小块进行回收及合并。统一通过内存管理软件中使用的内存,从而避免软件在运行过程中频繁的在堆栈中分配和释放内存,并通过合并机制减少内存碎片,达到对内存管理的要求。
【技术实现步骤摘要】
本专利技术涉及视频
,特别涉及一种高效的内存管理方法和装置。技术背景在使用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:将该内存大块对象与内存管理模块中的剩余空间进行合并,组合成更大的可供使用的内存空间,删除该内存大块对象,结束。通过上述实施例将创建内存空间扩展对象从系统中分配内存,并将得到的内存添加到内存管理模块中,由内存管理模块进行统一管理;当内存管理模块中存在可供使用的内存空间时,可根据程序中使用情况的不同,获取合适大小的内存块供使用者使用。当程序将使用完成的内存归还时,逐层合并空闲的内存空间,从而避免软件在运行过程中频繁的在堆栈中分配和释放内存,减少系统内存碎片,达到对内存管理的要求。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本专利技术可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本专利技术所必须的。本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种高效的内存管理装置,其特征在于,包括内存空间扩展模块,用于从系统中申请指定大小的可供使用的内存空间,并对自身申请的内存空间进行管理和维护;内存大块模块,用于管理一块从内存管理模块中得到的较大块内存空间,并能从这块内存空间中分配出更小的内存块供程序直接使用;内存小块模块,用于供程序直接使用,记录内存小块模块对象的首地址信息以及空间的大小信息;内存管理模块,用于管理程序使用的内存,管理内存的分配、回收。2.如权利要求1所述的内存管理装置,其特征在于,所述内存大块模块还用于对使用完成后的内存小块进行回收及合并。3.如权利要求2所述的内存管理装置,其特征在于,所述内存大块模块还用于记录程序使用的地址和首地址间的偏移位置信息,以及使用状态记录程序使用的地址和首地址间的偏移位置信息,以及使用状态。4.如权利要求1所述的内存管理装置,其特征在于,所述内存管理模块还用于通过所述内存空间扩展模块从系统中分配指定大小的内存空间,并添加到自身的管理中。5.如权利要求4所述的内存管理装置,其...
【专利技术属性】
技术研发人员:严玄,刘铁华,郑鹏程,
申请(专利权)人:新奥特北京视频技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。