CN105302739A - 一种内存管理方法和装置 - Google Patents

一种内存管理方法和装置 Download PDF

Info

Publication number
CN105302739A
CN105302739A CN201410348883.5A CN201410348883A CN105302739A CN 105302739 A CN105302739 A CN 105302739A CN 201410348883 A CN201410348883 A CN 201410348883A CN 105302739 A CN105302739 A CN 105302739A
Authority
CN
China
Prior art keywords
buffer
linked list
single linked
node
memory
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.)
Withdrawn
Application number
CN201410348883.5A
Other languages
English (en)
Inventor
张晓艳
沈寒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen ZTE Microelectronics Technology Co Ltd
Original Assignee
Shenzhen ZTE Microelectronics Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen ZTE Microelectronics Technology Co Ltd filed Critical Shenzhen ZTE Microelectronics Technology Co Ltd
Priority to CN201410348883.5A priority Critical patent/CN105302739A/zh
Priority to PCT/CN2015/073575 priority patent/WO2016011811A1/zh
Publication of CN105302739A publication Critical patent/CN105302739A/zh
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明实施例提供了一种内存管理方法,所述方法包括:分配具有固定起始地址和结束地址的物理内存;将所述物理内存划分为多个固定大小的缓冲区buffer,并将所述buffer串联成单链表结构;通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行分配和回收。本发明实施例还提供了一种内存管理装置。

Description

一种内存管理方法和装置
技术领域
本发明涉及内存管理技术领域,尤其涉及一种终端上高效内存管理方法和装置。
背景技术
目前,内存管理在软件开发和应用中占有重要的地位,并且对软件的性能有重要的影响。随着软件行业的迅猛发展及各类终端的涌现,用户对终端的需求越来越多,要求也越来越高。虽然随着软件技术的发展,各种终端的内存容量越来越大,但是目前的内存管理技术仍然不能完全满足软件发展的需要,因此,内存仍然是一种宝贵且紧俏的资源,如何对内存实施有效的管理也一直是研究的热点。
由于操作系统要考虑底层硬件管理、内存限制、内存碎片、多软件同时运行、多线程环境等情况,导致现有的内存的分配和回收操作都非常复杂,内存管理操作所消耗的时间成本成为软件开发和内存管理技术的瓶颈。目前,各类终端上现有的内存管理方法基本上都是通过动态分配内存实现的,根据系统需要的内存大小动态申请内存使用。由于外部系统需要的内存大小不一致,在动态申请使用内存时很容易产生内存碎片,无形中降低了内存使用效率。
另外,一些传统的方法在分配和回收时都需要进行大量的内存块结构查询,才能完成分配和回收操作,这就导致了内存管理的效率低下。在高性能的软件开发及应用领域,尤其是在迅猛发展的终端上,内存管理是关键的基础功能,内存管理的性能直接影响了整个软件系统的运行。
可见,现有内存管理方法中,内存管理效率低下以及内存分配和回收的过程中存在大量的内存碎片等问题是目前亟待解决的问题。
发明内容
有鉴于此,本发明实施例期望提供一种内存管理方法和装置,能够在一定程度上提高内存分配和回收的效率,减少内存碎片的产生,提高内存管理的效率,进而提升终端上的软件运行速度及数据传输速率。
为达到上述目的,本发明的技术方案是这样实现的:
本发明实施例提供了一种内存管理方法,所述方法包括:
分配具有固定起始地址和结束地址的物理内存;
将所述物理内存划分为多个固定大小的缓冲区buffer,并将所述buffer串联成单链表结构;
通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收。
上述方案中,所述通过对单链表节点的删除操作,对所述buffer进行分配包括:将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1。
上述方案中,所述通过对单链表节点的插入操作,对所述buffer进行回收包括:将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
上述方案中,所述方法还包括:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
上述方案中,所述方法还包括:在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
本发明实施例还提供了一种内存管理装置,所述装置包括:内存分配模块、buffer处理模块、分配回收模块,其中,
所述内存分配模块,用于分配具有固定的起始地址和结束地址的物理内存;
所述buffer处理模块,用于将所述物理内存划分为多个固定大小的缓冲区buffer,并将所述buffer串联成单链表结构;
所述分配回收模块,用于通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收。
上述方案中,所述分配回收模块通过对单链表节点的删除操作,对所述buffer进行分配包括:所述分配回收模块将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1;
上述方案中,所述分配回收模所述通过对单链表节点的插入操作,对所述buffer进行回收包括:所述分配回收模块将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
上述方案中,所述buffer处理模块还用于:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
上述方案中,所述buffer处理模块还用于:在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
本发明实施例所提供的内存管理方法和装置,先分配具有固定起始地址和结束地址的物理内存;再将所述物理内存划分为多个固定大小的缓冲区(buffer),并将所述buffer串联成单链表结构;最后通过对单链表节点的删除和插入操作,对所述buffer进行分配和回收。如此,能够在一定程度上提高内存分配和回收的效率,有效减少内存分配时产生的内存碎片;而且,本发明实施例采用单向链表结构简单,避免了现有技术中采用的遍历查找空闲内存的方式,大大提升内存处理速度及内存资源的利用率,有效提高内存管理效率,进而能大大提升终端上的软件运行速度及数据传输速率。
附图说明
图1为本发明实施例内存管理方法流程示意图;
图2为本发明实施例分配的固定大小的物理内存结构示意图;
图3为本发明实施例上行内存和下行内存结构示意图;
图4为本发明实施例串联后的buffer单链表结构示意图;
图5为本发明实施例buffer分配方法示意图;
图6为本发明实施例buffer回收方法示意图;
图7为本发明实施例内存管理装置结构示意图。
具体实施方式
在多模通信系统协议软件开发过程中,上下行数据的传输以及各个制式间数据的转移,都需要内存buffer来缓存或者暂存这些上下行数据。
为提高内存分配和回收的效率,本发明实施例中,先分配具有固定起始地址和结束地址的物理内存;再将所述物理内存划分为多个固定大小的buffer,并将所述buffer串联成单链表结构;最后通过对单链表节点的删除和插入操作,对所述buffer进行分配和回收。
本发明实施例所述单链表,包括头指针、尾指针、buffer计数器以及一个以上节点。其中,所述单链表结构的每个节点对应一个buffer,每个节点包括数据部分和指针部分,单链表的buffer计数器记录所述buffer的总个数。
具体的,通过对单链表节点的删除操作,对所述buffer进行分配包括:将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1。
通过对单链表节点的插入操作,对所述buffer进行回收包括:将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
所述方法还包括:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记;在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
下面结合附图及具体实施例,对本发明技术方案的实施作进一步的详细描述。本发明实施例内存管理方法流程,如图1所示,包括以下步骤:
步骤101:分配具有固定起始地址和结束地址的物理内存;
具体的,从双倍速率同步动态随机存储器(DDR_RAM,DoubleDataRateRandomAccessMemory)内存中预先规划分配一块固定大小的物理内存,所述物理内存的起始地址和结束地址在进行划分时确定;所述固定大小的物理内存的大小可以根据所需要传输的IP包的大小、同时传输的IP包个数、以及IP包的管理结构大小确定。
例如,本发明实施例中,可以分配10M固定大小的物理内存。如图2所示,图2为本发明实施例分配的固定大小的物理内存结构示意图。所述物理内存的起始地址为0x22A00000,结束地址为0x23400000。
步骤102:将所述物理内存划分为多个固定大小的buffer,并将所述buffer串联成单链表结构;
具体的,在初始化时,将所述物理内存划分为多个固定大小的buffer,并使用单向链表结构将这些固定大小的buffer串接起来。
所述单链表结构的每一个节点对应一个buffer,初始化后单链表的头指针指向分配的固定大小物理内存的基地址,单链表的buffer计数器记录所述buffer的总个数。
针对终端的上下行数据传输,初始化时将所述物理内存分为上行内存和下行内存两部分,如图3所示,上行内存的首地址即预先分配的物理内存的起始地址;下行内存的首地址是在上行内存的首地址和所有上行所有buffer占的内存大小的基础上偏移N字节得到的地址,例如,可以在上行内存的首地址和所有上行所有buffer占的内存大小的基础上偏移1024个字节得到下行内存的首地址;这里,做一个微小的偏移处理,既不会浪费内存,同时防止上下行内存地址重叠。将上下行内存分别划分成固定大小的buffer,例如,上下行buffer个数可分别设计为1024个,并分别通过链表串接起来,串接后的buffer单链表结构如图4所示,包括头指针、尾指针、buffer计数器以及一个以上节点。其中,所述单链表结构的每个节点对应一个buffer,每个节点包括数据部分和指针部分,单链表的buffer计数器记录所述buffer的总个数。
步骤103:通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收;
其中,所述通过对单链表节点的删除操作,对所述buffer进行分配包括:将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1;
本发明实施例buffer分配方法示意图如图5所示,具体的,当发送上行数据时,将上行buffer链表的头指针指向的buffer[0]分配给申请内存的功能模块或者线程,然后头指针后移指向下一个buffer[1],同时buffer个数减1,直到链表的头尾节点指针相同,则不再上行分配buffer。
当接收下行数据时,将下行了buffer链表的头指针指向的buffer[0]分配给申请内存的功能模块或者线程,然后头指针后移指向下一个buffer[1],同时buffer个数减1,直到链表的头尾节点指针相同,则不再分配buffer。
所述通过对单链表节点的插入操作,对所述buffer进行回收包括:将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
本发明实施例buffer回收方法示意图如图6所示。具体的,在上行数据发送结束之后,即申请内存的功能模块或线程使用完某个上行buffer[0]之后,将所述上行buffer[0]的首地址插入到上行buffer单链表的尾部,将该buffer[0]的下一节点指针置空,并将单链表的尾指针后指向所述插入的buffer[0],同时将buffer个数加1。
在下行数据接收完成之后,即申请内存的功能模块或线程使用完某个下行buffer[0]之后业,将所述下行buffe[0]的首地址其插入到下行buffer单链表的尾部,并将该buffer[0]的下一节点指针置空,并将单链表的尾指针后指向所述插入的buffer[0],同时将buffer个数加1。
本发明实施例中,在分配上下行buffer之前,要先判断首尾指针是否相等或者判断buffer个数是否减到0;如果首尾指针相等或者buffer个数减到0,则说明buffer耗尽,则不能继续分配内存。由于预先分配的物理内存块足够大,并且buffer个数足够多,如果出现buffer耗尽的情况,则说明系统本身出了问题。
本发明实施例中,为了防止buffer重复释放,还需要在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
具体的,在单链表中每个节点buffer的数据部分设置空闲Free标记,记录相应的buffer是否空闲,初始化时所述buffer为空闲Free,分配之后置为非空闲NotFree,回收时置为空闲Free,如此,能够防止buffer重复释放。
本发明实施例中,为了防止buffer发生越界访问,还需要在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
具体的,在单链表中每个节点buffer的数据部分设置是否越界访问的标记OverFlud,用于判断是否发生越界访问,初始化时为标记没有发生越界访问“NoFlud”,回收时判断仍为“NoFlud”,则没有发生越界访问的异常。
这里,越界访问指的是两个buffer之间出现了地址重叠。
本发明实施例中,由于buffer可能会被不同功能模块或者线程使用,因此在分配和回收时,需要对所述buffer加互斥量进行互斥;
这里,通过增加互斥量,能够确保应用程序或线程拥有对单个资源的互斥访问权,以保护由多个线程访问的内存块。互斥量能够保证访问内存块的任何线程拥有对该内存的独占访问权,进而保证数据的完整性。在某个线程或者功能模块申请buffer时,获取互斥量,在此期间,其他线程或者功能模块不能对链表进行操作,该线程或功能模块申请结束之后,释放互斥量。此时其他模块可进行申请和释放对链表进行操作。如此,能够不同的功能模块或者线程不能够同时对同一个buffer链表进行操作。
本发明实施例还提供了一种内存管理装置,如图7所示,所述装置包括内存分配模块71、buffer处理模块72、分配回收模块73,其中,
所述内存分配模块71,用于分配具有固定起始地址和结束地址的物理内存;
具体的,所述内存分配模块71从DDR_RAM内存中预先规划分配一块固定大小的物理内存,所述物理内存的起始地址和结束地址在进行划分时确定;所述固定大小的物理内存的大小可以根据所需要传输的IP包的大小、同时传输的IP包个数、以及IP包的管理结构大小确定。
所述buffer处理模块72,用于将所述物理内存划分为多个固定大小的buffer,并将所述buffer串联成单链表结构;
具体的,在初始化时,所述buffer处理模块72将所述物理内存划分为多个固定大小的buffer,并使用单向链表结构将这些固定大小的buffer串接起来。
所述单链表结构的每一个节点对应一个buffer,初始化后单链表的头指针指向分配的固定大小物理内存的基地址,单链表的buffer计数器记录所述buffer的总个数。
针对终端的上下行数据传输,初始化时所述buffer处理模块72将所述物理内存分为上行内存和下行内存两部分,上行内存的首地址即预先分配的物理内存的起始地址;下行内存的首地址是在上行内存的基地址和所有上行所有buffer占的内存大小的基础上偏移N字节得到的地址,例如,偏移1024个字节;这里,做一个微小的偏移处理,既不会浪费内存,同时防止上下行内存地址重叠。将上下行内存分别划分成固定大小的buffer,例如,上下行buffer个数可分别设计为1024个,并分别通过链表串接起来。
所述分配回收模块73,用于通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收。
其中,所述分配回收模块73通过对单链表节点的删除操作,对所述buffer进行分配包括:所述分配回收模块73将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1;
具体的,当发送上行数据时,所述分配回收模块73将上行buffer链表的头指针指向的buffer分配给申请内存的功能模块或者线程,然后头指针后移指向下一个buffer,同时buffer个数减1,直到链表的头尾节点指针相同,则不再上行分配buffer。
当接收下行数据时,所述分配回收模块73将下行了buffer链表的头指针指向的buffer分配给申请内存的功能模块或者线程,然后头指针后移指向下一个buffer,同时buffer个数减1,直到链表的头尾节点指针相同,则不再分配buffer。
所述分配回收模块73通过对单链表节点的插入操作,对所述buffer进行回收包括:所述分配回收模块73将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
在上行数据发送结束之后,即申请内存的功能模块或线程使用完某个上行buffer之后,所述分配回收模块73将所述上行buffer的首地址插入到上行buffer单链表的尾部,将该buffer的下一节点指针置空,并将单链表的尾指针后指向所述插入的buffer[0],同时将buffer个数加1。
在下行数据接收完成之后,即申请内存的功能模块或线程使用完某个下行buffer之后业,所述分配回收模块73将所述下行buffer的首地址其插入到下行buffer单链表的尾部,并将该buffer的下一节点指针置空,并将单链表的尾指针后指向所述插入的buffer[0],同时将buffer个数加1。
在分配上下行buffer之前,所述分配回收模块73还用于判断首尾指针是否相等或者判断buffer个数是否减到0;如果首尾指针相等或者buffer个数减到0,则说明buffer耗尽,则不能继续分配内存。由于预先分配的物理内存块足够大,并且buffer个数足够多,如果出现buffer耗尽的情况,则说明系统本身出了问题。
为了防止buffer重复释放,所述buffer处理模块72还用于:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
具体的,所述buffer处理模块72在链表中每个节点buffer的数据部分设置空闲Free标记,记录相应的buffer是否空闲,初始化时所述buffer为空闲Free,分配之后置为非空闲NotFree,回收时置为空闲Free,如此,能够防止buffer重复释放。
为了防止buffer发生越界访问,所述buffer处理模块72还用于:在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
具体的,所述buffer处理模块72在单链表中每个节点buffer的数据部分设置是否越界访问的标记OverFlud,用于判断是否发生越界访问,初始化时为标记没有发生越界访问“NoFlud”,回收时判断仍为“NoFlud”,则没有发生越界访问的异常。
这里,越界访问指的是两个buffer之间出现了地址重叠。
由于buffer可能会被不同功能模块或者线程使用,因此在分配和回收时,所述分配回收模块73需要对所述buffer加互斥量进行互斥;
这里,分配回收模块73通过增加互斥量,能够确保应用程序或线程拥有对单个资源的互斥访问权,以保护由多个线程访问的内存块。互斥量能够保证访问内存块的任何线程拥有对该内存的独占访问权,进而保证数据的完整性。在某个线程或者功能模块申请buffer时,获取互斥量,在此期间,其他线程或者功能模块不能对链表进行操作,该线程或功能模块申请结束之后,释放互斥量。此时其他模块可进行申请和释放对链表进行操作。如此,能够不同的功能模块或者线程不能够同时对同一个buffer链表进行操作。
图7中所示的内存管理装置中的各处理模块的实现功能,可参照前述内存管理方法的相关描述而理解。本领域技术人员应当理解,图7所示的内存管理装置中各处理模块的功能可通过运行于处理器上的程序而实现,也可通过具体的逻辑电路而实现,比如:可由中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)、或现场可编程门阵列(FPGA)实现。
在本发明所提供的几个实施例中,应该理解到,所揭露的方法和装置,可以通过其他的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个模块或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的通信连接可以是通过一些接口,设备或模块的间接耦合或通信连接,可以是电性的、机械的或其他形式的。
上述作为分离部件说明的模块可以是、或也可以不是物理上分开的,作为模块显示的部件可以是、或也可以不是物理模块,即可以位于一个地方,也可以分布到多个网络模块上;可以根据实际的需要选择其中的部分或全部模块来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能模块可以全部集成在一个处理模块中,也可以是各模块分别单独作为一个模块,也可以两个或两个以上模块集成在一个模块中;上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-OnlyMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明实施例上述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
本发明是实例中记载的内存管理方法和装置只以上述实施例为例,但不仅限于此,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (10)

1.一种内存管理方法,其特征在于,所述方法包括:
分配具有固定起始地址和结束地址的物理内存;
将所述物理内存划分为多个固定大小的缓冲区buffer,并将所述buffer串联成单链表结构;
通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收。
2.根据权利要求1所述方法,其特征在于,所述通过对单链表节点的删除操作,对所述buffer进行分配包括:将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1。
3.根据权利要求1所述方法,其特征在于,所述通过对单链表节点的插入操作,对所述buffer进行回收包括:将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
4.根据权利要求1所述方法,其特征在于,所述方法还包括:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
5.根据权利要求1所述方法,其特征在于,所述方法还包括:在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
6.一种内存管理装置,其特征在于,所述装置包括:内存分配模块、buffer处理模块、分配回收模块,其中,
所述内存分配模块,用于分配具有固定的起始地址和结束地址的物理内存;
所述buffer处理模块,用于将所述物理内存划分为多个固定大小的缓冲区buffer,并将所述buffer串联成单链表结构;
所述分配回收模块,用于通过对单链表节点的删除操作,对所述buffer进行分配;并通过对单链表节点的插入操作,对所述buffer进行回收。
7.根据权利要求6所述装置,其特征在于,所述分配回收模块通过对单链表节点的删除操作,对所述buffer进行分配包括:所述分配回收模块将所述单链表的头指针指向的buffer分配给申请内存的线程或功能模块,并将单链表的头指针指向下一个buffer,同时buffer个数减1。
8.根据权利要求6所述装置,其特征在于,所述分配回收模块所述通过对单链表节点的插入操作,对所述buffer进行回收包括:所述分配回收模块将所述线程或功能模块释放的buffer的首地址插入到所述单链表的尾部,并将单链表的尾指针后指向所述插入的buffer,同时将buffer个数加1。
9.根据权利要求6所述装置,其特征在于,所述buffer处理模块还用于:在单链表中每个buffer节点的数据部分设置用于标记当前buffer是否空闲的空闲标记。
10.根据权利要求6所述装置,其特征在于,所述buffer处理模块还用于:在单链表中每个buffer节点的数据部分设置用于判断当前buffer是否发生越界访问的越界访问标记。
CN201410348883.5A 2014-07-21 2014-07-21 一种内存管理方法和装置 Withdrawn CN105302739A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410348883.5A CN105302739A (zh) 2014-07-21 2014-07-21 一种内存管理方法和装置
PCT/CN2015/073575 WO2016011811A1 (zh) 2014-07-21 2015-03-03 一种内存管理方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410348883.5A CN105302739A (zh) 2014-07-21 2014-07-21 一种内存管理方法和装置

Publications (1)

Publication Number Publication Date
CN105302739A true CN105302739A (zh) 2016-02-03

Family

ID=55162481

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410348883.5A Withdrawn CN105302739A (zh) 2014-07-21 2014-07-21 一种内存管理方法和装置

Country Status (2)

Country Link
CN (1) CN105302739A (zh)
WO (1) WO2016011811A1 (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105868014A (zh) * 2016-04-08 2016-08-17 京信通信技术(广州)有限公司 内存优化的队列方法和系统
CN106028144A (zh) * 2016-06-15 2016-10-12 青岛海信宽带多媒体技术有限公司 电视终端中的音视频资源监控方法、装置及电视终端
CN106201910A (zh) * 2016-08-27 2016-12-07 浪潮(北京)电子信息产业有限公司 一种小块内存的管理方法和装置
CN107329833A (zh) * 2017-07-03 2017-11-07 郑州云海信息技术有限公司 一种利用链表实现内存连续的方法和装置
CN109101438A (zh) * 2018-07-25 2018-12-28 百度在线网络技术(北京)有限公司 用于存储数据的方法和装置
CN109144892A (zh) * 2018-08-27 2019-01-04 南京国电南自轨道交通工程有限公司 一种管理内存中高频变化数据的缓冲链表数据结构设计方法
CN110674053A (zh) * 2019-09-30 2020-01-10 深圳忆联信息系统有限公司 Ssd数据存储节点管理方法、装置、计算机设备及存储介质
CN111259014A (zh) * 2020-02-04 2020-06-09 苏州浪潮智能科技有限公司 一种fpga的单向链表数据存储方法及系统
CN113422793A (zh) * 2021-02-05 2021-09-21 阿里巴巴集团控股有限公司 数据传输方法、装置、电子设备及计算机存储介质
CN117806819A (zh) * 2023-12-20 2024-04-02 中科驭数(北京)科技有限公司 内存管理方法、装置、设备及计算机可读存储介质

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112000588A (zh) * 2020-07-30 2020-11-27 北京浪潮数据技术有限公司 fifo链表管理方法、装置、设备及可读存储介质
CN112328389B (zh) * 2020-10-12 2024-04-30 长沙新弘软件有限公司 一种用于二叉树添加和删除结点的内存分配方法
CN113453276B (zh) * 2021-05-18 2024-01-16 翱捷科技股份有限公司 一种提高lte终端上下行内存利用率的方法及装置
CN113419715B (zh) * 2021-06-17 2024-06-25 吕锦柏 一种基于链表的动态内存管理方法和设备
CN115934000B (zh) * 2023-03-07 2023-06-09 苏州浪潮智能科技有限公司 一种存储系统的定时方法及相关装置
CN117032995A (zh) * 2023-10-08 2023-11-10 苏州元脑智能科技有限公司 内存池管理方法、装置、计算机设备和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102999434A (zh) * 2011-09-15 2013-03-27 阿里巴巴集团控股有限公司 一种内存管理方法及装置
CN103678172A (zh) * 2013-12-25 2014-03-26 Tcl集团股份有限公司 一种本地数据缓存管理方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5577243A (en) * 1994-03-31 1996-11-19 Lexmark International, Inc. Reallocation of returned memory blocks sorted in predetermined sizes and addressed by pointer addresses in a free memory list
CN101630992B (zh) * 2008-07-14 2013-06-05 中兴通讯股份有限公司 共享内存管理方法
CN102455976B (zh) * 2010-11-02 2015-09-23 上海宝信软件股份有限公司 一种中间件内存管理的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102999434A (zh) * 2011-09-15 2013-03-27 阿里巴巴集团控股有限公司 一种内存管理方法及装置
CN103678172A (zh) * 2013-12-25 2014-03-26 Tcl集团股份有限公司 一种本地数据缓存管理方法及装置

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105868014A (zh) * 2016-04-08 2016-08-17 京信通信技术(广州)有限公司 内存优化的队列方法和系统
CN106028144A (zh) * 2016-06-15 2016-10-12 青岛海信宽带多媒体技术有限公司 电视终端中的音视频资源监控方法、装置及电视终端
CN106201910A (zh) * 2016-08-27 2016-12-07 浪潮(北京)电子信息产业有限公司 一种小块内存的管理方法和装置
CN107329833B (zh) * 2017-07-03 2021-02-19 苏州浪潮智能科技有限公司 一种利用链表实现内存连续的方法和装置
CN107329833A (zh) * 2017-07-03 2017-11-07 郑州云海信息技术有限公司 一种利用链表实现内存连续的方法和装置
CN109101438A (zh) * 2018-07-25 2018-12-28 百度在线网络技术(北京)有限公司 用于存储数据的方法和装置
CN109144892A (zh) * 2018-08-27 2019-01-04 南京国电南自轨道交通工程有限公司 一种管理内存中高频变化数据的缓冲链表数据结构设计方法
CN110674053A (zh) * 2019-09-30 2020-01-10 深圳忆联信息系统有限公司 Ssd数据存储节点管理方法、装置、计算机设备及存储介质
WO2021062981A1 (zh) * 2019-09-30 2021-04-08 深圳忆联信息系统有限公司 Ssd数据存储节点管理方法、装置及计算机设备
CN110674053B (zh) * 2019-09-30 2021-09-14 深圳忆联信息系统有限公司 Ssd数据存储节点管理方法、装置、计算机设备及存储介质
CN111259014A (zh) * 2020-02-04 2020-06-09 苏州浪潮智能科技有限公司 一种fpga的单向链表数据存储方法及系统
CN111259014B (zh) * 2020-02-04 2023-01-10 苏州浪潮智能科技有限公司 一种fpga的单向链表数据存储方法及系统
CN113422793A (zh) * 2021-02-05 2021-09-21 阿里巴巴集团控股有限公司 数据传输方法、装置、电子设备及计算机存储介质
CN117806819A (zh) * 2023-12-20 2024-04-02 中科驭数(北京)科技有限公司 内存管理方法、装置、设备及计算机可读存储介质

Also Published As

Publication number Publication date
WO2016011811A1 (zh) 2016-01-28

Similar Documents

Publication Publication Date Title
CN105302739A (zh) 一种内存管理方法和装置
CN102880573B (zh) 一种基于Linux系统的串行RapidIo数据传输方法
CN106547709B (zh) 灵活配置多通道dma控制器的方法及装置
CN104699541A (zh) 同步数据的方法、装置、数据传输组件及系统
CN103051687B (zh) 一种将应用业务部署到云存储虚拟机的系统及方法
CN108959127B (zh) 地址转换方法、装置及系统
CN102685914B (zh) 一种逻辑信道调度复用方法及装置
CN105677597A (zh) 数据写入方法及装置
CN112416969B (zh) 分布式数据库中的并行任务调度系统
CN103455433A (zh) 内存管理方法及系统
CN105740248A (zh) 一种数据同步方法、装置及系统
CN104615500A (zh) 一种服务器计算资源动态分配的方法
CN109902056A (zh) 一种串行传输的方法、装置、设备及计算机可读存储介质
CN103488577A (zh) 一种基于用途编号的用户程序内存分配及批量回收的方法及装置
CN105681346A (zh) 一种基于工厂类实现报文解析的方法
CN105359122A (zh) 多cpu系统中的增强型数据传输
CN102708063B (zh) 磁盘空间管理方法及装置
CN102656936A (zh) 一种lte基站中基带资源池的实现方法及装置
CN113791870B (zh) 一种WebAssembly虚拟机分布式系统细粒度迁移方法及系统
CN104679507B (zh) NAND Flash编程器烧录映像文件的生成方法及装置
CN103257936B (zh) 内存映射方法和内存映射模块
CN104731711A (zh) 一种网络设备写表方法及装置
CN103713953A (zh) 一种内存数据的搬移装置及方法
CN103313313A (zh) 传输带宽共享方法和装置
CN104778125A (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
WW01 Invention patent application withdrawn after publication
WW01 Invention patent application withdrawn after publication

Application publication date: 20160203