CN102915276A - 一种用于嵌入式系统的内存控制方法 - Google Patents
一种用于嵌入式系统的内存控制方法 Download PDFInfo
- Publication number
- CN102915276A CN102915276A CN201210360255XA CN201210360255A CN102915276A CN 102915276 A CN102915276 A CN 102915276A CN 201210360255X A CN201210360255X A CN 201210360255XA CN 201210360255 A CN201210360255 A CN 201210360255A CN 102915276 A CN102915276 A CN 102915276A
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- chained list
- pool
- block
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 739
- 238000000034 method Methods 0.000 title claims abstract description 21
- 238000007726 management method Methods 0.000 claims abstract description 109
- 101000617124 Mus musculus Stromal cell-derived factor 1 Proteins 0.000 claims description 14
- 230000008859 change Effects 0.000 claims description 8
- 230000006870 function Effects 0.000 claims description 8
- 230000007717 exclusion Effects 0.000 claims description 7
- 230000008520 organization Effects 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 abstract description 16
- 238000005516 engineering process Methods 0.000 abstract description 6
- 238000013024 troubleshooting Methods 0.000 abstract 1
- 230000008569 process Effects 0.000 description 7
- 238000011084 recovery Methods 0.000 description 7
- 239000012467 final product Substances 0.000 description 4
- 238000006062 fragmentation reaction Methods 0.000 description 4
- 238000007599 discharging Methods 0.000 description 3
- 238000013467 fragmentation Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000007812 deficiency Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
本发明提供一种用于嵌入式系统的内存控制方法,从操作系统中申请一块内存,内存的一部分作为内存池,另一部分作为预留内存区域;内存池采用池式管理,结合线程缓存技术,为每个线程建立一个缓存;预留内存区域采用TLSF算法管理;将该内存池切割成不同大小的内存块,同等大小的内存块连成双向链表,为每个内存块增加一个内存管理单元,内存管理单元和内存块分别放在不同的内存区域;为每一个线程建立一个内存统计链表,用于连接所有此线程申请的内存块,为方便内存泄露排查。另外,在不增加内存控制方法开销的前提下,增加了内存覆盖检查机制。
Description
技术领域
本发明涉及嵌入式系统技术领域,尤其是涉及嵌入式系统的内存控制方法。
背景技术
嵌入式系统的内存资源相当有限,故需要对其进行合理的规划和管理。内存是系统中所有线程运行的基础,是嵌入式系统最重要的系统资源。简单、高效的内存组织和管理,是系统稳定、高速运行的保证。嵌入式系统对内存分配要求达到快速性、可靠性和高效性。一种常见的管理方式就是内存池方式。
其实现机制是一次性将后续所有应用程序需要使用的内存全部申请下来,切割成各种固定大小的不同数量的内存块,按照一定的数据结构形成内存池,然后按需进行二次分配。
设计内存池的目的是为了保证服务器长时间高效的运行,通过对申请空间小而申请频繁的对象进行有效管理,减少内存碎片的产生,合理分配管理用户内存,从而减少系统中出现有效空间足够,而无法分配大块内存的情况。而且内存池实现简单,分配和回收较快。
但是内存池也是存在一定缺点的,所有的进程共享同一个内存池,多个进程的多个任务都在分配释放内存块时会竞争同一个锁,锁的开销会大大降低内存管理方式的效率。另外,内存池的控制信息和应用层的内存块连续存放,一旦发生应用程序内存覆盖的误操作,往往会覆盖内存块的控制信息,有可能会导致包括系统崩溃在内的严重后果。
此外,C代码中指针的应用会带来内存越界的隐患,经常出现某段内存的内容被修改而导致系统运行异常,可出现异常时只是犯罪现场,无法定位出是谁修改了这段内存。对这些情况,通常的做法,只能是审查代码,凭经验找出可能出错的代码,进行大量的分析试验,才能找到真凶。
发明内容
本发明提出了一种内存控制方法,其目的在于增加内存覆盖检查机制,提高内存使用效率,减少应用程序内存覆盖的概率。
本发明的技术方案为一种用于嵌入式系统的内存控制方法,从操作系统中申请一块内存,内存的一部分作为内存池,另一部分作为预留内存区域;内存池采用池式管理,为每个线程配置一个线程缓存;预留内存区域采用TLSF算法管理;
进行内存初始化操作时,执行以下步骤,
步骤1.1,初始化内存池,包括将内存池切割成不同大小的内存块,为同等大小的内存块维护一个内存管理头结构;为每个内存块分配一个内存管理单元;
步骤1.2,初始化预留内存区域,包括按照TLSF算法的数据结构组织预留内存区域,并维护两个内存管理头结构,一个用来管理小内存块,另一个用来管理大内存块,小内存块和大内存块根据预设参数划分;
步骤1.3,初始化各线程缓存的内存管理头结构,为任一线程申请的内存中同等大小的内存块维护一个内存管理头结构;
步骤1.4,初始化每个线程的一个内存统计链表,所述内存统计链表是用于连接任一线程申请的所有内存块;
内存池、预留内存区域和各线程缓存的内存管理头结构均包括空闲内存块的个数、已使用内存块的个数、空闲链表、已使用链表和互斥锁;内存池和预留内存区域的各内存块的内存管理单元的域包括内存池双向链表、线程缓存链表、内存块状态、线程使用内存统计链表、内存管理参数和指向内存块的指针,内存管理参数包括内存块的大小size,所述内存池双向链表为空闲链表或已使用链表;预留内存区域中,用来管理小内存块的内存管理头结构中已使用链表称为小内存链表,预留内存区域中,用来管理大内存块的内存管理头结构中已使用链表称为大内存链表;
进行内存分配操作时,执行以下步骤,
步骤2.1,根据应用程序申请的内存大小,向上调整到内存池中切割内存块的大小,记为目标size;查看线程缓存对应大小内存块的空闲链表中是否是合适的内存块,
如果有,将内存块从线程缓存的空闲链表中删除,挂在线程缓存的已使用链表中,并更新该内存块的内存管理单元的相关信息,包括状态更新为已使用,并标记为从内存池中分配,返回内存块的首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,进入步骤2.2;
步骤2.2,查看内存池中是否有目标size的空闲内存块,
如果有,将空闲的内存块从内存池的空闲链表中移除,挂在内存池的使用链表中,并更新内存管理单元的相关信息,包括状态更新为已使用,并标记为从内存池中分配,返回内存块首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,进入步骤2.3;
步骤2.3,查找比目标size大一个size的内存块,
如果有,将空闲内存块从内存池的空闲链表中移除,挂在内存池的使用链表中,并更新内存管理单元的相关信息,尤其是状态更新为已使用,并标记为从内存池中分配,返回内存块首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,根据应用程序申请的内存大小从预留内存区域中申请内存块,并分配相应的内存管理单元;设置内存管理单元的相关信息,包括状态为已使用,并标记为从预留内存区域中分配;返回内存块首地址,将此内存块加入到线程的内存统计链表中;根据应用程序申请的内存大小和预设参数,确定申请的内存块是小内存块还是大内存块;如果申请的是小内存块,将申请的内存块挂到小内存链表中,并更新哈希表的信息,将此内存块插入到二级哈希结构中,完成分配;如果申请的是大内存块,将申请的内存块挂到大内存链表中;
进行内存释放操作时,执行以下步骤,
步骤3.1,由输入地址找到对应的内存管理单元;
步骤3.2,根据内存管理单元中的内存块状态域来判断,
如果是从内存中的内存池申请的,转入步骤3.3;
如果是从预留内存区域分配的,将内存管理单元从预留内存区域的对应内存管理头结构的已使用链表中删除,将内存块从线程的内存统计链表中删除,如果是小内存块则更新哈希查找结构的信息;并采用TLSF算法的free函数释放内存块和相应内存管理单元,完成释放;
步骤3.3,将内存管理单元从内存池的使用链表中移除,挂到线程缓存的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放;
步骤3.4,检查线程缓存中空闲内存块数目与使用内存块数目的比值,
如果小于一定阈值,则将内存管理单元从线程缓存的使用链表中移除,挂到线程缓存的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放;
否则,将内存管理单元从线程缓存的使用链表中移除,挂到内存池的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放。
而且,进行内存覆盖检查时,对要定位的内存块执行以下步骤,
步骤4.1,根据输入地址判断该内存块是在内存池中还是预留内存区域中,
如果是在内存池中,则先定位该内存块位于哪个size内存块的范围,然后取模运行定位内存边界;
如果是在预留内存区域中,则转入步骤4.2;
步骤4.2,遍历大内存链表查找该内存块,
如果查找到则得到内存边界,
否则,采用二级哈希算法来定位内存边界。
而且,内存池中,内存管理单元和内存块分别放在不同的内存区域;预留内存区域中,内存管理单元和内存块分别放在不同的内存区域。
本发明的创新点在于:
1. 为每个内存块增加一个内存管理单元,在管理单元中增加了容错信息,记录所有与内存分配、回收以及内存块状态的信息,实现内存使用状态监控、内存泄露探测等功能;
2. 将数据段和管理单元的内存分离,以防止内存小范围越界,影响内存管理单元;
3. 将内存池与线程缓存技术结合,并启动主动回收和强制回收机制,避免大量内存碎片的同时,有效地提高了分配的效率,对多线程多进程的系统尤为适用;
4. 增加了内存覆盖检查机制,设计了一套定位内存边界的算法,对于非连续的内存块,以地址为哈希key,通过二级哈希结构来定位,从源头上杜绝内存覆盖;
5. 由于在内存管理结构中增加了状态监控、内存泄露等探测功能,在内存申请释放时加入了使用内存块的统计信息,对于程序中的内存泄露,可以较快的定位出来。
附图说明
图1为本发明实施例中内存池的数据结构图;
图2为本发明实施例中内存统计的数据结构图;
图3为本发明实施例中内存池中内存块状态变化图;
图4为本发明实施例中哈希查找结构的地址key划分图;
图5为本发明实施例中哈希查找结构图。
具体实施方式
以下结合附图和实施例详细说明本发明技术方案。
本发明的内存控制机制适用于共享内存,堆内存等,首先从操作系统中申请一大块内存,一部分作为内存池,另一部分作为预留内存区域,基于内存池和预留内存区域的内存管理操作具体包括内存初始化、内存分配、内存释放、缓存回收、内存覆盖检查。内存池采用池式管理,结合线程缓存技术,为每个线程建立一个缓存,避免所有线程竞争同一个锁的情况,并增加主动回收和强制回收机制,保证内存池对其他线程的供应,此机制避免了内存碎片,并有效提高了进程间通信的效率;预留内存区域采用TLSF算法来管理,以避免内存池中空闲内存块不足的情况,预留一段内存区域。TLSF算法具体实现为现有技术。
实施例中,内存初始化操作包括:
步骤1.1,初始化内存池,内存池的数据结构如图1所示,将此内存切割成多组固定大小的内存块,每组内存块字节大小是一致的,如图1中32字节的所有内存块为一组,64字节的所有内存块为一组。实施例中每组内存块的大小为2的幂次方字节,比如第0组内存块的大小均为32字节,第1组内存块的大小均为64字节,以此类推,第n组内存块的大小均为2^(n+5)。内存区域切割成固定大小的内存块后,同等大小的内存块连成双向链表,可采用一个空闲链表和一个已使用链表。初始化的时候所有内存块都是挂在空闲链表中,已使用的内存块改为挂在已使用链表中。
实施例对于相同大小的内存块,维护一个管理头结构,记录空闲内存块的个数、已使用内存块的个数、空闲链表和已使用链表。如图1中的32字节管理头结构、64字节管理头结构、128字节管理头结构、256字节管理头结构等。其中,空闲链表连接所有空闲的内存块,已使用链表连接所有已使用的内存块。管理头结构还包含一个互斥锁(mutex域),用于在分配/释放时,对链表的访问实现多线程的互斥访问。
另外,为每个内存块建立对应的内存管理单元,用来记录所有与内存分配、回收相关的信息,实现内存使用状态监控、内存泄露探测等功能。实施例的内存管理单元中的参数包括:
1) 内存池双向链表:内存池中链接同等大小的内存块管理单元;
2) 线程缓存链表:线程缓存中链接同等大小的内存块管理单元;
3) 内存块状态:记录当前内存块的使用状态及所在的区域(内存池或TLSF预留区域);根据内存块状态可知其是否被使用,即可进行重复释放检查;
4) 内存块大小:记录当前内存块可使用的大小,例如图1中32字节管理头结构下的内存管理单元内存块大小均为32字节;
5) 线程使用内存统计链表:每个线程会维护图2的一个统计链表表头,统计各线程的内存使用情况,此项参数是用来链接同一线程申请的内存管理单元,以便随时可以查看内存使用情况,检查是否存在内存泄露;
6) 内存管理参数:包括内存块申请释放的时间、申请内存的文件名和函数名,方便出错时跟踪内存使用流程;
7) 指向内存块的指针:内存块才是真正返回给应用程序使用的一段内存,在内存管理单元中维护这个指针,主要是为了根据内存管理单元较方便找到对应的内存块。
图1中的内存块是实际分配给应用程序使用的一段内存,理论上是按照上述32字节、64字节切割即可,为了防止内存越界,在各字节内存块前后各预留一个红灯区(Red zone1和Red zone2),保护内存块。另外,内存块中还维护一个指针,指向其内存管理单元,方便根据内存块迅速定位到对应的内存管理单元。
内存管理单元和内存块分别放在内存不同的内存区域,以防止发生应用程序内存覆盖的误操作,覆盖内存块的内存管理单元,有可能会导致包括系统崩溃在内的严重后果。
步骤1.2,初始化预留内存区域,按照TLSF算法(Two Levels Segregate Fit memory allocator,二级隔离适应算法)的数据结构将预留内存区域组织起来,并初始化两个内存管理头结构,一个用来管理小内存块,另一个用来管理大内存块。为方便描述起见,用来管理小内存块的内存管理头结构中已使用链表称为小内存链表,预留内存区域中,用来管理大内存块的内存管理头结构中已使用链表称为大内存链表。
划分大小内存块的预设参数用户可根据实际需求来设置。区分大小内存块主要是为了后续的内存覆盖检查,哈希查找算法只针对小内存块,假定小于等于8192字节的内存块为小内存,大于8192字节的内存块为大内存,那么对于大内存块的地址,低13位(2^13=8192)是完全一样的,如果采用哈希查找算法,哈希冲突太多,很难均匀的散列开来。因此可以初始化用于内存覆盖检查的哈希查找头结构(如图5中一级哈希桶)。
对于预留内存区域的管理,不是像内存池一样预先分割好,也没有缓存机制,而是在申请时从预留内存区域中根据申请需要分配相应大小的内存块,并分配一个内存管理单元。因此具体实施时,预留内存区域的内存管理头结构和内存管理单元具体结构与内存池的可以一致,只是空闲链表无需使用。预留内存区域中,内存管理单元和内存块也分别放在不同的内存区域。
步骤1.3,初始化各线程缓存的内存管理头结构,这个结构同内存池各组内存块的内存管理头结构一致,包括空闲内存块的个数、已使用内存块的个数、空闲链表和已使用链表、互斥锁。线程可能申请不同大小的内存块,每个线程针对不同字节大小分别建立内存管理头结构,也是同等大小的内存建立一个内存管理头结构,如32字节有一个管理头结构,64字节同样有一个管理头结构,不同字节大小的管理头结构用数组来组织。
各线程缓存的内存管理头结构和申请的内存块的内存管理单元具体结构与内存池的也保持一致。
步骤1.4,初始化各线程的内存统计链表(即线程使用内存统计链表)的表头,数据结构如图2所示,内存统计链表头包括申请的内存块的总数目、申请的内存块的总大小、互斥锁和双向链表。此处双向链表是用来连接所有此线程申请的内存块,具体是附图1中的线程内存使用统计链表。
实施例为每一个线程建立一个内存统计链表,用来连接所有此线程申请的内存块,供内存泄露探测用。申请内存完毕会将内存块挂到此内存统计链表中,记录该线程申请的所有内存块,以方便进行内存泄露排查。
具体实施时,步骤1.1和步骤1.2可以不分先后,在进程启动开始时完成即可,步骤1.1中内存池各内存块大小及其分布,可通过预设的配置文件来配置;步骤1.3、步骤1.4可以不分先后,在线程启动开始时完成即可。
内存分配/释放操作负责为上层应用程序提供内存分配/释放的接口,本发明改进了传统的池式管理机制,将内存池算法与线程缓存技术结合,并预留一段内存采用TLSF算法来管理,以避免内存池中空闲内存块不足的情况,避免了大量的内存碎片。同时,为每一个线程配置一个缓存,线程分配释放优先从缓存池中查找,减少了所有线程竞争同一个锁的开销,大大提高了分配的效率。
本发明分配内存块时,先检查线程缓存池中是否有对应固定大小的空闲内存块,如果有则从线程缓存池中分配内存块,并更新内存块的状态为已使用;如果线程缓存池中没有对应固定大小的空闲内存块,则从内存池的空闲链表中分配,并更新内存块的状态为已使用。如果内存池中某个固定大小的内存块不能满足应用程序的需求,则分配大一个size的内存块;如果内存池中大一个size的内存块也没有,则从预留的内存区域中采用TLSF算法来分配内存。TLSF算法采用位图管理,两级索引,实现简单,动态性较强。
实施例中内存分配步骤如下:
步骤2.1,根据应用程序申请的内存大小,向上调整到内存池中内存块的大小,即调整为2的幂次方的大小的内存块,例如应用程序申请31字节的内存,则从32字节的内存块中查找空闲块。查看线程缓存对应大小内存块的空闲链表中是否是合适的内存块,
如果有,将内存块从线程缓存的空闲链表中删除,挂在线程缓存的已使用链表中,并更新该内存块的内存管理单元的相关信息,尤其是状态更新为已使用,并标记为从内存池中分配,返回内存块的首地址,将此内存块加入到线程的内存统计链表中,完成分配;否则,进入步骤2.2;
步骤2.2,查看内存池中是否有合适的空闲内存块,
如果有,将空闲的内存块从内存池的空闲链表中移除,挂在内存池的使用链表中,并更新内存管理单元的相关信息,尤其是状态更新为已使用,并标记为从内存池中分配,返回内存块首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,进入步骤2.3;
步骤2.3,查找大一个size的内存块,即例如32字节的内存块已全部使用完,则检查内存池中64字节是否有空闲的内存块,
如果有,将空闲内存块从内存池的空闲链表中移除,挂在内存池的使用链表中,并更新内存管理单元的相关信息,尤其是状态更新为已使用,并标记为从内存池中分配,返回内存块首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,说明此时内存池中的对应size的内存块不够用,根据应用程序申请的内存大小从预留内存区域中申请内存块,并分配相应的内存管理单元,;设置内存管理单元的相关信息,包括状态为已使用,并标记为从预留内存区域中分配,返回内存块首地址,将此内存块加入到线程的内存统计链表中。根据应用程序申请的内存大小,确定申请的是小内存块还是大内存块。并将申请的内存块挂到内存管理头结构的已使用链表中。即如果申请的是大内存块,将申请的内存块挂到大内存链表中;如果申请的是小内存块,将申请的内存块挂到小内存链表中。如果申请的是小内存块,则需要更新哈希表的信息,将此内存块插入到二级哈希结构中,完成分配。
本发明释放内存块时,检查线程缓存池的空闲链表中是否缓存的内存块超过一定阈值,如果是,则将内存块主动还给内存池;否则该内存块仍缓存在线程缓存池中。
实施例内存释放的步骤如下:
步骤3.1,由输入地址(内存块地址)找到对应的内存管理单元;
具体实施时,可以提供内存分配/释放的库函数,供应用程序调用。内存释放的时候,应用程序传入输入地址,以确定要释放哪块内存。
步骤3.2,根据内存管理单元中的内存块状态域来判断,
如果是从内存中的内存池申请的,转入步骤3.3;
如果是从预留内存区域分配的,将内存管理单元从预留内存区域的对应内存管理头结构的已使用链表中删除,即若释放的内存块是大内存块则从大内存链表中删除,是小内存块则从小内存链表中删除;将此内存块从线程的内存统计链表中删除,如果是小内存块还需要更新哈希查找结构的信息;并采用TLSF算法的free函数释放内存块和相应内存管理单元,完成释放;
步骤3.3,将内存管理单元从内存池的使用链表中移除,挂到线程缓存的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放;
步骤3.4,检查线程缓存中空闲内存块数目与使用内存块数目的比值,
如果小于一定阈值,则将内存管理单元从线程缓存的已使用链表中移除,挂到线程缓存的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放;
否则,将内存管理单元从线程缓存的已使用链表中移除,挂到内存池的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放。用户可根据实际使用来情况预先设定阈值,实施例中将其设置为1;
完成释放即可结束流程。
本发明进一步提出,缓存回收过程的实现可同时采用主动回收机制和强制回收机制,释放内存的时候,会检查线程缓存中空闲内存块数目与使用内存块数目的比值,如果超过阈值(本实施例中为1)则启动主动回收机制,将内存归还给内存池。同时维护一个线程专门负责强制回收,如果内存池中空闲内存块不足,则强制回收线程缓存中的空闲内存块。
实施例中,专门维护一个线程负责强制回收,维护一个全局信号量和全局数组,全局信号量用来唤醒强制回收线程,全局数组用来通知强制回收线程哪个size的内存块需要强制回收。每次分配内存时检查内存池中空闲内存的数量,如果全局内存池中空闲内存块的数量低于设计的阈值,则唤醒一个全局信号量,并将全局数组的对应元素置为1,启动强制回收机制。强制回收线程一直等待该全局信号量,如果等到信号量,则检查全局数组各个元素哪个被置1了,确认哪种size的内存块需要被强制回收。确认后依次遍历每个线程缓存中该size的内存管理头结构,将线程缓存空闲链表中的内存管理单元全部移除到相应的全局内存池的空闲链表中。回收完成之后,需要将全局数组的该元素清零。
综上所述,内存池中内存块的状态变化请参见图3,内存池初始化完,所有的内存块均挂在内存池的空闲链表下,状态为空闲;被分配出去之后,该内存块挂在线程缓存的已使用链表下,状态为已使用;释放的时候,如果线程缓存的内存块未超过一定阈值,则将该内存块移到线程缓存的空闲链表下,否则启动主动回收机制,将该内存块挂到内存池的空闲链表下,状态为空闲;另外,如果内存池中空闲内存块低于一定阈值,启动强制回收机制,会将内存块从线程缓存的空闲链表中移到内存池的空闲链表中,状态为空闲。
本发明还包含了一种内存覆盖检查算法,内存覆盖检查的难点就是根据输入地址定位出可使用的内存块的起始地址,即内存边界。内存覆盖检查操作通过定位内存块的起始地址,来检查是否会出现内存覆盖。对于内存池,由于内存池中内存块地址是连续的,可以通过取模运算来定位内存块的起始地址;对于预留内存区域,由于分配出去的内存地址不连续,采用两级哈希索引结构来定位内存边界,以内存地址作为哈希算法的key(关键码)值。本方法无需改动内存管理方案,实用性较强。
实施例的内存覆盖检查过程包括如下步骤:
步骤4.1,根据输入地址判断该内存块是在内存池中还是预留内存区域中,
如果是在内存池中,则先定位该内存块位于哪个size块的范围,然后取模运行即可定位出内存块的边界;
如果是在预留内存区域中,则转入步骤4.2;
步骤4.2,遍历大内存链表查找该内存块,
如果查找到则得到内存边界,
否则,说明该内存块位于小内存块链表中,对这个链表中的内存块,采用二级哈希算法来定位内存边界。
本发明实施例以内存地址作为哈希关键码值,将内存地址分为3段,请参见图4:高几位作为一级哈希的关键码值,中间的几位作为二级哈希的关键码值,对于一级哈希和二级哈希关键码值具体取值,可依照实际工程中的情况而定,原则上是依据小内存块的大小分布,尽量减少哈希冲突,使得不同的内存地址均匀的散列开来。本实施例中将小于等于8192字节的内存块定义为小内存,针对小于8192字节的内存块做哈希运算。由于8192=2^13,所以对于8192字节的内存块,其地址低13位是完全一样的,一级哈希取内存块地址的高19位(19+13=32)作为其哈希关键码值,通过哈希运算将不同地址的内存块散列开来。对于一级哈希冲突,采用再哈希法,取其地址的中间8位作为二级哈希关键码值。经过两级哈希之后,内存地址由于剩下的低5位相同而产生冲突,采用链表的方式将其链接起来,冲突链表的最大长度为2^5=32,不会影响查找效率。
实施例的哈希结构图请参见图5,将一级哈希结构用哈希桶来存储,相同的哈希值用同一个链表连起来,对链表中的每个节点,做二次哈希,同样采用哈希桶来存储,用链表来链接哈希冲突值。当然,每次申请、释放内存块的时候都必须更新此套哈希结构,一级哈希桶中的互斥锁是用来保证插入、删除和查找的同步。一级哈希桶包括一级哈希头节点、互斥锁,一级哈希桶的桶深由一级哈希头节点的个数而定;一级哈希节点的参数包括哈希链表、二级哈希头节点、一级哈希关键码值。二级哈希桶包括二级哈希头节点,二级哈希桶的桶深由二级哈希头节点的个数而定;二级哈希节点的参数包括哈希链表、内存块起始地址、内存块结尾地址。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
Claims (3)
1.一种用于嵌入式系统的内存控制方法,其特征在于:从操作系统中申请一块内存,内存的一部分作为内存池,另一部分作为预留内存区域;内存池采用池式管理,为每个线程配置一个线程缓存;预留内存区域采用TLSF算法管理;
进行内存初始化操作时,执行以下步骤,
步骤1.1,初始化内存池,包括将内存池切割成不同大小的内存块,为同等大小的内存块维护一个内存管理头结构;为每个内存块分配一个内存管理单元;
步骤1.2,初始化预留内存区域,包括按照TLSF算法的数据结构组织预留内存区域,并维护两个内存管理头结构,一个用来管理小内存块,另一个用来管理大内存块,小内存块和大内存块根据预设参数划分;
步骤1.3,初始化各线程缓存的内存管理头结构,为任一线程申请的内存中同等大小的内存块维护一个内存管理头结构;
步骤1.4,初始化每个线程的一个内存统计链表,所述内存统计链表是用于连接任一线程申请的所有内存块;
内存池、预留内存区域和各线程缓存的内存管理头结构均包括空闲内存块的个数、已使用内存块的个数、空闲链表、已使用链表和互斥锁;内存池和预留内存区域的各内存块的内存管理单元的域包括内存池双向链表、线程缓存链表、内存块状态、线程使用内存统计链表、内存管理参数和指向内存块的指针,内存管理参数包括内存块的大小size,所述内存池双向链表为空闲链表或已使用链表;预留内存区域中,用来管理小内存块的内存管理头结构中已使用链表称为小内存链表,预留内存区域中,用来管理大内存块的内存管理头结构中已使用链表称为大内存链表;
进行内存分配操作时,执行以下步骤,
步骤2.1,根据应用程序申请的内存大小,向上调整到内存池中切割内存块的大小,记为目标size;查看线程缓存对应大小内存块的空闲链表中是否是合适的内存块,
如果有,将内存块从线程缓存的空闲链表中删除,挂在线程缓存的已使用链表中,并更新该内存块的内存管理单元的相关信息,包括状态更新为已使用,并标记为从内存池中分配,返回内存块的首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,进入步骤2.2;
步骤2.2,查看内存池中是否有目标size的空闲内存块,
如果有,将空闲的内存块从内存池的空闲链表中移除,挂在内存池的使用链表中,并更新内存管理单元的相关信息,包括状态更新为已使用,并标记为从内存池中分配,返回内存块首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,进入步骤2.3;
步骤2.3,查找比目标size大一个size的内存块,
如果有,将空闲内存块从内存池的空闲链表中移除,挂在内存池的使用链表中,并更新内存管理单元的相关信息,尤其是状态更新为已使用,并标记为从内存池中分配,返回内存块首地址,将此内存块加入到线程的内存统计链表中,完成分配;
否则,根据应用程序申请的内存大小从预留内存区域中申请内存块,并分配相应的内存管理单元;设置内存管理单元的相关信息,包括状态为已使用,并标记为从预留内存区域中分配;返回内存块首地址,将此内存块加入到线程的内存统计链表中;根据应用程序申请的内存大小和预设参数,确定申请的内存块是小内存块还是大内存块;如果申请的是小内存块,将申请的内存块挂到小内存链表中,并更新哈希表的信息,将此内存块插入到二级哈希结构中,完成分配;如果申请的是大内存块,将申请的内存块挂到大内存链表中;
进行内存释放操作时,执行以下步骤,
步骤3.1,由输入地址找到对应的内存管理单元;
步骤3.2,根据内存管理单元中的内存块状态域来判断,
如果是从内存中的内存池申请的,转入步骤3.3;
如果是从预留内存区域分配的,将内存管理单元从预留内存区域的对应内存管理头结构的已使用链表中删除,将内存块从线程的内存统计链表中删除,如果是小内存块则更新哈希查找结构的信息;并采用TLSF算法的free函数释放内存块和相应内存管理单元,完成释放;
步骤3.3,将内存管理单元从内存池的使用链表中移除,挂到线程缓存的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放;
步骤3.4,检查线程缓存中空闲内存块数目与使用内存块数目的比值,
如果小于一定阈值,则将内存管理单元从线程缓存的使用链表中移除,挂到线程缓存的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放;
否则,将内存管理单元从线程缓存的使用链表中移除,挂到内存池的空闲链表中,并更新状态域为空闲状态,将此内存块从线程的内存统计链表中删除,完成释放。
2.根据权利要求1所述用于嵌入式系统的内存控制方法,其特征在于:进行内存覆盖检查时,对要定位的内存块执行以下步骤,
步骤4.1,根据输入地址判断该内存块是在内存池中还是预留内存区域中,
如果是在内存池中,则先定位该内存块位于哪个size内存块的范围,然后取模运行定位内存边界;
如果是在预留内存区域中,则转入步骤4.2;
步骤4.2,遍历大内存链表查找该内存块,
如果查找到则得到内存边界,
否则,采用二级哈希算法来定位内存边界。
3.根据权利要求1或2所述用于嵌入式系统的内存控制方法,其特征在于:内存池中,内存管理单元和内存块分别放在不同的内存区域;预留内存区域中,内存管理单元和内存块分别放在不同的内存区域。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210360255.XA CN102915276B (zh) | 2012-09-25 | 2012-09-25 | 一种用于嵌入式系统的内存控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210360255.XA CN102915276B (zh) | 2012-09-25 | 2012-09-25 | 一种用于嵌入式系统的内存控制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102915276A true CN102915276A (zh) | 2013-02-06 |
CN102915276B CN102915276B (zh) | 2015-06-03 |
Family
ID=47613649
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210360255.XA Expired - Fee Related CN102915276B (zh) | 2012-09-25 | 2012-09-25 | 一种用于嵌入式系统的内存控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102915276B (zh) |
Cited By (60)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103353860A (zh) * | 2013-06-28 | 2013-10-16 | 贵阳朗玛信息技术股份有限公司 | 内存管理方法及装置 |
CN103425592A (zh) * | 2013-08-05 | 2013-12-04 | 大唐移动通信设备有限公司 | 一种多进程系统中的内存管理方法及装置 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN103530239A (zh) * | 2013-10-18 | 2014-01-22 | 深圳市新格林耐特通信技术有限公司 | 一种使用内存池提升通信服务器性能的方法 |
CN103885888A (zh) * | 2014-03-05 | 2014-06-25 | 珠海全志科技股份有限公司 | 基于tlsf的嵌入式实时系统的内存管理方法、系统及装置 |
CN103902466A (zh) * | 2014-04-04 | 2014-07-02 | 浪潮电子信息产业股份有限公司 | 一种可动态调节的内存池 |
CN104063328A (zh) * | 2014-04-04 | 2014-09-24 | 浪潮电子信息产业股份有限公司 | 一种缓解碎片产生的内存管理方法 |
CN104239192A (zh) * | 2013-06-21 | 2014-12-24 | 中兴通讯股份有限公司 | 内存监控处理方法及装置 |
CN104424123A (zh) * | 2013-09-10 | 2015-03-18 | 中国石油化工股份有限公司 | 一种无锁数据缓冲区及其使用方法 |
CN104657157A (zh) * | 2013-11-20 | 2015-05-27 | 上海华虹集成电路有限责任公司 | 在8051芯片中优化内存的方法 |
CN104820612A (zh) * | 2015-05-22 | 2015-08-05 | 网宿科技股份有限公司 | 一种可执行文件的内存执行方法 |
CN104881324A (zh) * | 2014-09-28 | 2015-09-02 | 北京匡恩网络科技有限责任公司 | 一种多线程下的内存管理方法 |
CN105302734A (zh) * | 2014-07-22 | 2016-02-03 | 北京畅游天下网络技术有限公司 | 内存管理系统和方法 |
CN105354147A (zh) * | 2014-08-20 | 2016-02-24 | 腾讯科技(深圳)有限公司 | 一种内存池管理方法及管理系统 |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN105978985A (zh) * | 2016-06-07 | 2016-09-28 | 华中科技大学 | 一种用户态RPC over RDMA的内存管理方法 |
CN106502926A (zh) * | 2016-09-26 | 2017-03-15 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC系统 |
CN106502918A (zh) * | 2016-09-19 | 2017-03-15 | 上海华为技术有限公司 | 一种内存调度方法及装置 |
CN106802861A (zh) * | 2015-11-26 | 2017-06-06 | 大唐移动通信设备有限公司 | 一种检测内存泄露的方法和装置 |
CN106844046A (zh) * | 2016-12-31 | 2017-06-13 | 昊宏广泰(北京)科技有限公司 | 宽带载波内存管理算法 |
CN106855788A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 一种堆空间的内存分配管理方法 |
CN106855845A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 堆空间的内存分配管理系统及嵌入式芯片 |
CN107133103A (zh) * | 2017-05-05 | 2017-09-05 | 第四范式(北京)技术有限公司 | 用于数据流式计算的内存管理系统及其方法 |
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN107168804A (zh) * | 2017-05-31 | 2017-09-15 | 上海联影医疗科技有限公司 | 一种内存资源管理方法与系统 |
CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
CN107515788A (zh) * | 2017-08-31 | 2017-12-26 | 郑州云海信息技术有限公司 | 一种内存分配的方法及装置 |
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108038062A (zh) * | 2017-11-27 | 2018-05-15 | 北京锦鸿希电信息技术股份有限公司 | 嵌入式系统的内存管理方法和装置 |
CN108062247A (zh) * | 2016-11-09 | 2018-05-22 | 腾讯科技(深圳)有限公司 | 一种内存管理方法及系统 |
CN108108307A (zh) * | 2016-11-24 | 2018-06-01 | 中移(杭州)信息技术有限公司 | 一种资源处理方法及终端 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN108600119A (zh) * | 2018-04-02 | 2018-09-28 | 北京理工大学 | 一种面向c-ran基带处理的数据缓冲区管理方法 |
CN108595259A (zh) * | 2017-03-16 | 2018-09-28 | 哈尔滨英赛克信息技术有限公司 | 一种基于全局管理的内存池管理方法 |
CN108958993A (zh) * | 2017-05-18 | 2018-12-07 | 兰州大学 | 一种基于Linux的在线内存检测器MEMDOG |
CN108958952A (zh) * | 2018-06-26 | 2018-12-07 | 郑州云海信息技术有限公司 | 消息通讯方法、装置、设备及可读存储介质 |
WO2018228344A1 (zh) * | 2017-06-16 | 2018-12-20 | 深圳市万普拉斯科技有限公司 | 内存重整方法、装置、电子设备及可读存储介质 |
CN109710408A (zh) * | 2018-12-24 | 2019-05-03 | 杭州迪普科技股份有限公司 | 内存管理方法和装置 |
CN110109763A (zh) * | 2019-04-12 | 2019-08-09 | 厦门亿联网络技术股份有限公司 | 一种共享内存管理方法及装置 |
CN110413521A (zh) * | 2019-07-24 | 2019-11-05 | 杭州迪普信息技术有限公司 | 一种堆内存的写越界检测方法和装置 |
CN110502335A (zh) * | 2019-06-12 | 2019-11-26 | 成都虚谷伟业科技有限公司 | 分布式数据库多级内存管理装置 |
CN110928680A (zh) * | 2019-11-09 | 2020-03-27 | 上交所技术有限责任公司 | 一种适用于证券交易系统的订单内存分配方法 |
CN110943936A (zh) * | 2019-11-08 | 2020-03-31 | 中国科学院信息工程研究所 | 一种高效的基于动态数组的网络流量处理方法及系统 |
CN111190737A (zh) * | 2019-12-31 | 2020-05-22 | 中科晶上(苏州)信息技术有限公司 | 一种针对嵌入式系统的内存分配方法 |
CN111221647A (zh) * | 2019-12-25 | 2020-06-02 | 天津中科曙光存储科技有限公司 | 一种分布式存储缓存回收的优化算法及装置 |
CN111240826A (zh) * | 2019-12-27 | 2020-06-05 | 江苏艾佳家居用品有限公司 | 适用于3d模型资源的大规模展示的内存管理方法 |
CN111464860A (zh) * | 2019-01-18 | 2020-07-28 | 中国科学院声学研究所 | 一种视频数据的缓存分配方法 |
CN112100089A (zh) * | 2020-07-30 | 2020-12-18 | 北京智行者科技有限公司 | 内存管理方法 |
CN112214313A (zh) * | 2020-09-22 | 2021-01-12 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
CN112241325A (zh) * | 2020-12-15 | 2021-01-19 | 南京集成电路设计服务产业创新中心有限公司 | 一种基于内存池的超大规模集成电路数据库和设计方法 |
CN112328412A (zh) * | 2020-11-13 | 2021-02-05 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
CN112346848A (zh) * | 2019-08-09 | 2021-02-09 | 中兴通讯股份有限公司 | 一种管理内存池的方法、装置及终端 |
CN112947856A (zh) * | 2021-02-05 | 2021-06-11 | 彩讯科技股份有限公司 | 一种内存数据的管理方法、装置、计算机设备及存储介质 |
CN113138859A (zh) * | 2020-01-17 | 2021-07-20 | 北京中软万维网络技术有限公司 | 一种基于共享内存池的通用数据存储方法 |
CN113220604A (zh) * | 2021-05-31 | 2021-08-06 | 深圳华云信息系统有限公司 | 内存申请方法、装置、电子设备和计算机可读存储介质 |
CN113296703A (zh) * | 2021-05-27 | 2021-08-24 | 山东云海国创云计算装备产业创新中心有限公司 | 一种堆内存管理方法、装置、设备及介质 |
CN113988838A (zh) * | 2021-11-03 | 2022-01-28 | 北京万集科技股份有限公司 | 一种psam卡管理方法及装置 |
CN117033002A (zh) * | 2023-10-09 | 2023-11-10 | 苏州元脑智能科技有限公司 | 一种内存管理方法、装置、设备及存储介质 |
CN117076139A (zh) * | 2023-10-17 | 2023-11-17 | 北京融为科技有限公司 | 数据处理方法及相关设备 |
WO2024087875A1 (zh) * | 2022-10-26 | 2024-05-02 | 北京火山引擎科技有限公司 | 内存管理方法、装置、介质及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
US20040221120A1 (en) * | 2003-04-25 | 2004-11-04 | International Business Machines Corporation | Defensive heap memory management |
CN1963788A (zh) * | 2005-11-08 | 2007-05-16 | 中兴通讯股份有限公司 | 一种内存管理方法 |
US20070136358A1 (en) * | 2005-11-02 | 2007-06-14 | Sourcecode Technology Holding, Inc. | Methods and apparatus for storing data associated with an electronic form |
CN101013396A (zh) * | 2007-02-07 | 2007-08-08 | 重庆重邮信科股份有限公司 | 一种分块内存的申请和释放方法 |
CN102521143A (zh) * | 2011-12-14 | 2012-06-27 | 瑞斯康达科技发展股份有限公司 | 一种堆数据处理方法及装置 |
-
2012
- 2012-09-25 CN CN201210360255.XA patent/CN102915276B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
US20040221120A1 (en) * | 2003-04-25 | 2004-11-04 | International Business Machines Corporation | Defensive heap memory management |
US20070136358A1 (en) * | 2005-11-02 | 2007-06-14 | Sourcecode Technology Holding, Inc. | Methods and apparatus for storing data associated with an electronic form |
CN1963788A (zh) * | 2005-11-08 | 2007-05-16 | 中兴通讯股份有限公司 | 一种内存管理方法 |
CN101013396A (zh) * | 2007-02-07 | 2007-08-08 | 重庆重邮信科股份有限公司 | 一种分块内存的申请和释放方法 |
CN102521143A (zh) * | 2011-12-14 | 2012-06-27 | 瑞斯康达科技发展股份有限公司 | 一种堆数据处理方法及装置 |
Non-Patent Citations (2)
Title |
---|
杨海军: "《一种防止堆溢出的有效方法》", 《计算机科学》, vol. 36, no. 4, 30 April 2009 (2009-04-30) * |
杨海军: "《一种防止堆缓冲区溢出的有效方法》", 《中国优秀硕士学位论文全文数据库(电子期刊)信息科技辑》, vol. 2012, no. 03, 31 March 2012 (2012-03-31), pages 1 - 57 * |
Cited By (92)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239192A (zh) * | 2013-06-21 | 2014-12-24 | 中兴通讯股份有限公司 | 内存监控处理方法及装置 |
CN103353860B (zh) * | 2013-06-28 | 2016-02-24 | 贵阳朗玛信息技术股份有限公司 | 内存管理方法及装置 |
CN103353860A (zh) * | 2013-06-28 | 2013-10-16 | 贵阳朗玛信息技术股份有限公司 | 内存管理方法及装置 |
CN103425592B (zh) * | 2013-08-05 | 2016-08-10 | 大唐移动通信设备有限公司 | 一种多进程系统中的内存管理方法及装置 |
CN103425592A (zh) * | 2013-08-05 | 2013-12-04 | 大唐移动通信设备有限公司 | 一种多进程系统中的内存管理方法及装置 |
CN104424123B (zh) * | 2013-09-10 | 2018-03-06 | 中国石油化工股份有限公司 | 一种无锁数据缓冲区及其使用方法 |
CN104424123A (zh) * | 2013-09-10 | 2015-03-18 | 中国石油化工股份有限公司 | 一种无锁数据缓冲区及其使用方法 |
CN103514053B (zh) * | 2013-09-22 | 2017-01-25 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN103530239A (zh) * | 2013-10-18 | 2014-01-22 | 深圳市新格林耐特通信技术有限公司 | 一种使用内存池提升通信服务器性能的方法 |
CN104657157A (zh) * | 2013-11-20 | 2015-05-27 | 上海华虹集成电路有限责任公司 | 在8051芯片中优化内存的方法 |
CN103885888A (zh) * | 2014-03-05 | 2014-06-25 | 珠海全志科技股份有限公司 | 基于tlsf的嵌入式实时系统的内存管理方法、系统及装置 |
CN103885888B (zh) * | 2014-03-05 | 2017-05-24 | 珠海全志科技股份有限公司 | 基于tlsf的嵌入式实时系统的内存管理方法、系统及装置 |
CN103902466A (zh) * | 2014-04-04 | 2014-07-02 | 浪潮电子信息产业股份有限公司 | 一种可动态调节的内存池 |
CN104063328A (zh) * | 2014-04-04 | 2014-09-24 | 浪潮电子信息产业股份有限公司 | 一种缓解碎片产生的内存管理方法 |
CN105302734B (zh) * | 2014-07-22 | 2018-04-06 | 北京畅游天下网络技术有限公司 | 内存管理系统和方法 |
CN105302734A (zh) * | 2014-07-22 | 2016-02-03 | 北京畅游天下网络技术有限公司 | 内存管理系统和方法 |
CN105354147B (zh) * | 2014-08-20 | 2019-05-31 | 腾讯科技(深圳)有限公司 | 一种内存池管理方法及管理系统 |
CN105354147A (zh) * | 2014-08-20 | 2016-02-24 | 腾讯科技(深圳)有限公司 | 一种内存池管理方法及管理系统 |
CN104881324A (zh) * | 2014-09-28 | 2015-09-02 | 北京匡恩网络科技有限责任公司 | 一种多线程下的内存管理方法 |
CN104820612B (zh) * | 2015-05-22 | 2018-02-09 | 网宿科技股份有限公司 | 一种可执行文件的内存执行方法 |
CN104820612A (zh) * | 2015-05-22 | 2015-08-05 | 网宿科技股份有限公司 | 一种可执行文件的内存执行方法 |
CN105389210B (zh) * | 2015-10-16 | 2019-07-30 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN106802861A (zh) * | 2015-11-26 | 2017-06-06 | 大唐移动通信设备有限公司 | 一种检测内存泄露的方法和装置 |
CN106855788A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 一种堆空间的内存分配管理方法 |
CN106855845A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 堆空间的内存分配管理系统及嵌入式芯片 |
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN105978985B (zh) * | 2016-06-07 | 2019-03-05 | 华中科技大学 | 一种用户态RPC over RDMA的内存管理方法 |
CN105978985A (zh) * | 2016-06-07 | 2016-09-28 | 华中科技大学 | 一种用户态RPC over RDMA的内存管理方法 |
CN106502918A (zh) * | 2016-09-19 | 2017-03-15 | 上海华为技术有限公司 | 一种内存调度方法及装置 |
CN106502918B (zh) * | 2016-09-19 | 2019-10-18 | 上海华为技术有限公司 | 一种内存调度方法及装置 |
CN106502926B (zh) * | 2016-09-26 | 2019-11-19 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC系统 |
CN106502926A (zh) * | 2016-09-26 | 2017-03-15 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC系统 |
CN108062247B (zh) * | 2016-11-09 | 2021-09-14 | 腾讯科技(深圳)有限公司 | 一种内存管理方法及系统 |
CN108062247A (zh) * | 2016-11-09 | 2018-05-22 | 腾讯科技(深圳)有限公司 | 一种内存管理方法及系统 |
CN108108307A (zh) * | 2016-11-24 | 2018-06-01 | 中移(杭州)信息技术有限公司 | 一种资源处理方法及终端 |
CN106844046B (zh) * | 2016-12-31 | 2021-06-11 | 北京市腾河智慧能源科技有限公司 | 宽带载波内存管理方法 |
CN106844046A (zh) * | 2016-12-31 | 2017-06-13 | 昊宏广泰(北京)科技有限公司 | 宽带载波内存管理算法 |
CN108595259A (zh) * | 2017-03-16 | 2018-09-28 | 哈尔滨英赛克信息技术有限公司 | 一种基于全局管理的内存池管理方法 |
CN109460302A (zh) * | 2017-05-05 | 2019-03-12 | 第四范式(北京)技术有限公司 | 用于数据流式计算的内存管理系统及其方法 |
CN107133103B (zh) * | 2017-05-05 | 2019-01-01 | 第四范式(北京)技术有限公司 | 用于数据流式计算的内存管理系统及其方法 |
CN107133103A (zh) * | 2017-05-05 | 2017-09-05 | 第四范式(北京)技术有限公司 | 用于数据流式计算的内存管理系统及其方法 |
CN109460302B (zh) * | 2017-05-05 | 2020-01-21 | 第四范式(北京)技术有限公司 | 用于数据流式计算的内存管理系统及其方法 |
CN108958993A (zh) * | 2017-05-18 | 2018-12-07 | 兰州大学 | 一种基于Linux的在线内存检测器MEMDOG |
CN108958993B (zh) * | 2017-05-18 | 2021-11-19 | 兰州大学 | 一种基于Linux的在线内存检测器MEMDOG |
CN107168804A (zh) * | 2017-05-31 | 2017-09-15 | 上海联影医疗科技有限公司 | 一种内存资源管理方法与系统 |
WO2018228344A1 (zh) * | 2017-06-16 | 2018-12-20 | 深圳市万普拉斯科技有限公司 | 内存重整方法、装置、电子设备及可读存储介质 |
CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
CN107515788A (zh) * | 2017-08-31 | 2017-12-26 | 郑州云海信息技术有限公司 | 一种内存分配的方法及装置 |
CN108038062A (zh) * | 2017-11-27 | 2018-05-15 | 北京锦鸿希电信息技术股份有限公司 | 嵌入式系统的内存管理方法和装置 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108038002B (zh) * | 2017-12-15 | 2021-11-02 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108132842B (zh) * | 2017-12-15 | 2021-11-02 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN108600119A (zh) * | 2018-04-02 | 2018-09-28 | 北京理工大学 | 一种面向c-ran基带处理的数据缓冲区管理方法 |
CN108958952A (zh) * | 2018-06-26 | 2018-12-07 | 郑州云海信息技术有限公司 | 消息通讯方法、装置、设备及可读存储介质 |
CN109710408A (zh) * | 2018-12-24 | 2019-05-03 | 杭州迪普科技股份有限公司 | 内存管理方法和装置 |
CN111464860A (zh) * | 2019-01-18 | 2020-07-28 | 中国科学院声学研究所 | 一种视频数据的缓存分配方法 |
CN111464860B (zh) * | 2019-01-18 | 2021-06-08 | 中国科学院声学研究所 | 一种视频数据的缓存分配方法 |
CN110109763A (zh) * | 2019-04-12 | 2019-08-09 | 厦门亿联网络技术股份有限公司 | 一种共享内存管理方法及装置 |
CN110502335A (zh) * | 2019-06-12 | 2019-11-26 | 成都虚谷伟业科技有限公司 | 分布式数据库多级内存管理装置 |
CN110413521B (zh) * | 2019-07-24 | 2023-01-24 | 杭州迪普信息技术有限公司 | 一种堆内存的写越界检测方法和装置 |
CN110413521A (zh) * | 2019-07-24 | 2019-11-05 | 杭州迪普信息技术有限公司 | 一种堆内存的写越界检测方法和装置 |
CN112346848A (zh) * | 2019-08-09 | 2021-02-09 | 中兴通讯股份有限公司 | 一种管理内存池的方法、装置及终端 |
CN110943936A (zh) * | 2019-11-08 | 2020-03-31 | 中国科学院信息工程研究所 | 一种高效的基于动态数组的网络流量处理方法及系统 |
CN110928680B (zh) * | 2019-11-09 | 2023-09-12 | 上交所技术有限责任公司 | 一种适用于证券交易系统的订单内存分配方法 |
CN110928680A (zh) * | 2019-11-09 | 2020-03-27 | 上交所技术有限责任公司 | 一种适用于证券交易系统的订单内存分配方法 |
CN111221647B (zh) * | 2019-12-25 | 2023-07-07 | 天津中科曙光存储科技有限公司 | 一种分布式存储缓存回收的优化方法及装置 |
CN111221647A (zh) * | 2019-12-25 | 2020-06-02 | 天津中科曙光存储科技有限公司 | 一种分布式存储缓存回收的优化算法及装置 |
CN111240826B (zh) * | 2019-12-27 | 2022-07-08 | 江苏艾佳家居用品有限公司 | 适用于3d模型资源的大规模展示的内存管理方法 |
CN111240826A (zh) * | 2019-12-27 | 2020-06-05 | 江苏艾佳家居用品有限公司 | 适用于3d模型资源的大规模展示的内存管理方法 |
CN111190737A (zh) * | 2019-12-31 | 2020-05-22 | 中科晶上(苏州)信息技术有限公司 | 一种针对嵌入式系统的内存分配方法 |
CN113138859A (zh) * | 2020-01-17 | 2021-07-20 | 北京中软万维网络技术有限公司 | 一种基于共享内存池的通用数据存储方法 |
CN112100089B (zh) * | 2020-07-30 | 2023-08-01 | 重庆兰德适普信息科技有限公司 | 内存管理方法 |
CN112100089A (zh) * | 2020-07-30 | 2020-12-18 | 北京智行者科技有限公司 | 内存管理方法 |
CN112214313A (zh) * | 2020-09-22 | 2021-01-12 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
CN112328412A (zh) * | 2020-11-13 | 2021-02-05 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
CN112328412B (zh) * | 2020-11-13 | 2024-05-07 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
CN112241325B (zh) * | 2020-12-15 | 2021-03-23 | 南京集成电路设计服务产业创新中心有限公司 | 一种基于内存池的超大规模集成电路数据库和设计方法 |
CN112241325A (zh) * | 2020-12-15 | 2021-01-19 | 南京集成电路设计服务产业创新中心有限公司 | 一种基于内存池的超大规模集成电路数据库和设计方法 |
CN112947856B (zh) * | 2021-02-05 | 2024-05-03 | 彩讯科技股份有限公司 | 一种内存数据的管理方法、装置、计算机设备及存储介质 |
CN112947856A (zh) * | 2021-02-05 | 2021-06-11 | 彩讯科技股份有限公司 | 一种内存数据的管理方法、装置、计算机设备及存储介质 |
CN113296703A (zh) * | 2021-05-27 | 2021-08-24 | 山东云海国创云计算装备产业创新中心有限公司 | 一种堆内存管理方法、装置、设备及介质 |
CN113220604A (zh) * | 2021-05-31 | 2021-08-06 | 深圳华云信息系统有限公司 | 内存申请方法、装置、电子设备和计算机可读存储介质 |
CN113220604B (zh) * | 2021-05-31 | 2021-12-07 | 深圳华云信息系统有限公司 | 内存申请方法、装置、电子设备和计算机可读存储介质 |
CN113988838A (zh) * | 2021-11-03 | 2022-01-28 | 北京万集科技股份有限公司 | 一种psam卡管理方法及装置 |
WO2024087875A1 (zh) * | 2022-10-26 | 2024-05-02 | 北京火山引擎科技有限公司 | 内存管理方法、装置、介质及电子设备 |
CN117033002B (zh) * | 2023-10-09 | 2024-02-09 | 苏州元脑智能科技有限公司 | 一种内存管理方法、装置、设备及存储介质 |
CN117033002A (zh) * | 2023-10-09 | 2023-11-10 | 苏州元脑智能科技有限公司 | 一种内存管理方法、装置、设备及存储介质 |
CN117076139B (zh) * | 2023-10-17 | 2024-04-02 | 北京融为科技有限公司 | 数据处理方法及相关设备 |
CN117076139A (zh) * | 2023-10-17 | 2023-11-17 | 北京融为科技有限公司 | 数据处理方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN102915276B (zh) | 2015-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102915276A (zh) | 一种用于嵌入式系统的内存控制方法 | |
CN103927261B (zh) | 用于精简供应存储的高效分配和回收的方法和系统 | |
CN101221536B (zh) | 嵌入式系统的内存管理方法及装置 | |
CN101501623B (zh) | 感知文件系统的块存储系统、装置和方法 | |
US8909887B1 (en) | Selective defragmentation based on IO hot spots | |
US8250333B2 (en) | Mapping address table maintenance in a memory device | |
CN106502587B (zh) | 硬盘数据管理方法和硬盘控制装置 | |
US10503424B2 (en) | Storage system | |
CN103558992A (zh) | 堆外直接内存数据存储器,创建和/或管理堆外直接内存数据存储器的方法,和/或包括堆外直接内存数据存储器的系统 | |
CN102446139B (zh) | 一种数据存储方法及装置 | |
CN104899156A (zh) | 一种面向大规模社交网络的图数据存储及查询方法 | |
CN103365944A (zh) | 文件系统提示 | |
CN103458023A (zh) | 分布式闪存存储系统 | |
TW201301030A (zh) | 在一記憶體裝置中減少次要位址表檢查之快速轉譯指示器 | |
CN102968378B (zh) | 一种内存分配和释放的方法、装置及系统 | |
CN104317742A (zh) | 一种优化空间管理的自动精简配置方法 | |
CN106383666B (zh) | 一种数据存储方法及装置 | |
CN104731799A (zh) | 内存数据库管理装置 | |
CN106095589A (zh) | 一种分配分区的方法、装置及系统 | |
CN102946413B (zh) | 虚拟机调度和执行部署过程中的资源预处理方法及系统 | |
CN106445835A (zh) | 内存分配方法与装置 | |
CN110245129B (zh) | 一种分布式全局数据去重方法和装置 | |
CN111240890B (zh) | 数据处理方法、快照处理方法、装置及计算设备 | |
CN103049393B (zh) | 内存空间管理方法和装置 | |
CN105988921A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 430074, No. 88, postal academy road, Hongshan District, Hubei, Wuhan Patentee after: WUHAN POST AND TELECOMMUNICATIONS RESEARCH INSTITUTE Co.,Ltd. Address before: 430074, No. 88, postal academy road, Hongshan District, Hubei, Wuhan Patentee before: WUHAN Research Institute OF POSTS AND TELECOMMUNICATIONS |
|
CP01 | Change in the name or title of a patent holder | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150603 |
|
CF01 | Termination of patent right due to non-payment of annual fee |