一种内存管理方法和装置的制造方法
【技术领域】
[0001 ] 本发明涉及内存管理技术领域,尤其涉及一种终端上高效内存管理方法和装置。
【背景技术】
[0002]目前,内存管理在软件开发和应用中占有重要的地位,并且对软件的性能有重要的影响。随着软件行业的迅猛发展及各类终端的涌现,用户对终端的需求越来越多,要求也越来越高。虽然随着软件技术的发展,各种终端的内存容量越来越大,但是目前的内存管理技术仍然不能完全满足软件发展的需要,因此,内存仍然是一种宝贵且紧俏的资源,如何对内存实施有效的管理也一直是研究的热点。
[0003]由于操作系统要考虑底层硬件管理、内存限制、内存碎片、多软件同时运行、多线程环境等情况,导致现有的内存的分配和回收操作都非常复杂,内存管理操作所消耗的时间成本成为软件开发和内存管理技术的瓶颈。目前,各类终端上现有的内存管理方法基本上都是通过动态分配内存实现的,根据系统需要的内存大小动态申请内存使用。由于外部系统需要的内存大小不一致,在动态申请使用内存时很容易产生内存碎片,无形中降低了内存使用效率。
[0004]另外,一些传统的方法在分配和回收时都需要进行大量的内存块结构查询,才能完成分配和回收操作,这就导致了内存管理的效率低下。在高性能的软件开发及应用领域,尤其是在迅猛发展的终端上,内存管理是关键的基础功能,内存管理的性能直接影响了整个软件系统的运行。
[0005]可见,现有内存管理方法中,内存管理效率低下以及内存分配和回收的过程中存在大量的内存碎片等问题是目前亟待解决的问题。
【发明内容】
[0006]有鉴于此,本发明实施例期望提供一种内存管理方法和装置,能够在一定程度上提闻内存分配和回收的效率,减少内存碎片的广生,提闻内存管理的效率,进而提升终端上的软件运行速度及数据传输速率。
[0007]为达到上述目的,本发明的技术方案是这样实现的:
[0008]本发明实施例提供了一种内存管理方法,所述方法包括:
[0009]分配具有固定起始地址和结束地址的物理内存;
[0010]将所述物理内存划分为多个固定大小的缓冲区buffer,并将所述buffer串联成单链表结构;
[0011]通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收。
[0012]上述方案中,所述通过对单链表节点的删除操作,对所述buffer进行分配包括:将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1。
[0013]上述方案中,所述通过对单链表节点的插入操作,对所述buffer进行回收包括:将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
[0014]上述方案中,所述方法还包括:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
[0015]上述方案中,所述方法还包括:在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
[0016]本发明实施例还提供了一种内存管理装置,所述装置包括:内存分配模块、buffer处理模块、分配回收模块,其中,
[0017]所述内存分配模块,用于分配具有固定的起始地址和结束地址的物理内存;
[0018]所述buffer处理模块,用于将所述物理内存划分为多个固定大小的缓冲区buffer,并将所述buffer串联成单链表结构;
[0019]所述分配回收模块,用于通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收。
[0020]上述方案中,所述分配回收模块通过对单链表节点的删除操作,对所述buffer进行分配包括:所述分配回收模块将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1 ;
[0021]上述方案中,所述分配回收模所述通过对单链表节点的插入操作,对所述buffer进行回收包括:所述分配回收模块将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加
Ιο
[0022]上述方案中,所述buffer处理模块还用于:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
[0023]上述方案中,所述buffer处理模块还用于:在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
[0024]本发明实施例所提供的内存管理方法和装置,先分配具有固定起始地址和结束地址的物理内存;再将所述物理内存划分为多个固定大小的缓冲区(buffer),并将所述buffer串联成单链表结构;最后通过对单链表节点的删除和插入操作,对所述buffer进行分配和回收。如此,能够在一定程度上提高内存分配和回收的效率,有效减少内存分配时产生的内存碎片;而且,本发明实施例采用单向链表结构简单,避免了现有技术中采用的遍历查找空闲内存的方式,大大提升内存处理速度及内存资源的利用率,有效提高内存管理效率,进而能大大提升终端上的软件运行速度及数据传输速率。
【附图说明】
[0025]图1为本发明实施例内存管理方法流程示意图;
[0026]图2为本发明实施例分配的固定大小的物理内存结构示意图;
[0027]图3为本发明实施例上行内存和下行内存结构示意图;
[0028]图4为本发明实施例串联后的buffer单链表结构示意图;
[0029]图5为本发明实施例buffer分配方法示意图;
[0030]图6为本发明实施例buffer回收方法示意图;
[0031]图7为本发明实施例内存管理装置结构示意图。
【具体实施方式】
[0032]在多模通信系统协议软件开发过程中,上下行数据的传输以及各个制式间数据的转移,都需要内存buffer来缓存或者暂存这些上下行数据。
[0033]为提高内存分配和回收的效率,本发明实施例中,先分配具有固定起始地址和结束地址的物理内存;再将所述物理内存划分为多个固定大小的buffer,并将所述buffer串联成单链表结构;最后通过对单链表节点的删除和插入操作,对所述buffer进行分配和回收。
[0034]本发明实施例所述单链表,包括头指针、尾指针、buffer计数器以及一个以上节点。其中,所述单链表结构的每个节点对应一个buffer,每个节点包括数据部分和指针部分,单链表的buffer计数器记录所述buffer的总个数。
[0035]具体的,通过对单链表节点的删除操作,对所述buffer进行分配包括:将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1。
[0036]通过对单链表节点的插入操作,对所述buffer进行回收包括:将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
[0037]所述方法还包括:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记;在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
[0038]下面结合附图及具体实施例,对本发明技术方案的实施作进一步的详细描述。本发明实施例内存管理方法流程,如图1所示,包括以下步骤:
[0039]步骤101:分配具有固定起始地址和结束地址的物理内存;
[0040]具体的,从双倍速率同步动态随机存储器(DDR_RAM,Double Data Rate RandomAccess Memory)内存中预先规划分配一块固定大小的物理内存,所述物理内存的起始地址和结束地址在进行划分时确定;所述固定大小的物理内存的大小可以根据所需要传输的IP包的大小、同时传输的IP包个数、以及IP包的管理结构大小确定。
[0041]例如,本发明实施例中,可以分配10M固定大小的物理内存。如图2所示,图2为本发明实施例分配的固定大小的物理内存结构示意图。所述物理内存的起始地址为0x22A00000,结束地址为 0x23400000。
[0042]步骤102:将所述物理内存划分为多个固定大小的buffer,并将所述buffer串联成单链表结构;
[0043]具体的,在初始化时,将所述物理内存划分为多个固定大小的buffer,并使用单向链表结构将这些固定大小的buffer串接起来。
[0044]所述单链表结构的每一个节点对应一个buffer,初始化后单链表的头指针指向分