CN104063328A - 一种缓解碎片产生的内存管理方法 - Google Patents
一种缓解碎片产生的内存管理方法 Download PDFInfo
- Publication number
- CN104063328A CN104063328A CN201410134861.9A CN201410134861A CN104063328A CN 104063328 A CN104063328 A CN 104063328A CN 201410134861 A CN201410134861 A CN 201410134861A CN 104063328 A CN104063328 A CN 104063328A
- Authority
- CN
- China
- Prior art keywords
- memory
- pool
- chained list
- space
- management
- 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
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供一种缓解碎片产生的内存管理方法,属于计算机领域,本发明包括两部分,一是缓存管理模块用于处理重复申请释放,二是内存池管理用于实际的内存分配与回收,采用内存重复使用缓存管理加内存池管理相结合的方法来进行内存管理,加快内存分配速度,提高内存分配效率,实现高效、快速内存分配,及抑制内存碎片产生。
Description
技术领域
本发明涉及计算机领域,具体地说是一种缓解碎片产生的内存管理方法。
背景技术
内存管理要高效、快速的分配,并且能有效地抑制碎片的产生。内存碎片分为内部碎片和外部碎片。因为所有的内存分配必须起始于可被4、8或16整除(视处理器体系结构而定)的地址或者因为MMU的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配给客户。假设当某个客户请求一个43字节的内存块时,因为没有适合大小的内存,所以它可能会获得44字节、48字节等稍大一点的字节,因此由所需大小四舍五入而产生的多余空间就叫内部碎片;频繁的分配与回收物理页面会导致大量的、连续且小的页面块夹杂在已分配的页面中间,就会产生外部碎片。假设有一块一共有100个单位的 连续空闲内存空间,范围是0~99。如果你从中申请一块内存,如10个单位,那么申请出来的内存块就为0~9区间。这时候你继续申请一块内存,比如说5个单位大,第二块得到的内存块就应该为10~14区间。如果你把第一块内存块释放,然后再申请一块大于10个单位的内存块,比如说20个单位。因为刚被释放的内存块不能满足新的请求,所以只能从15开始分配出20个单位的内存块。现在整个内存空间的状态是0~9空闲,10~14被占用,15~24被占用,25~99空闲。其中0~9就是一个内存碎片了。如果10~14一直被占用,而以后申请的空间都大于10个单位,那么0~9就永远用不上了,变成外部碎片。
发明内容
本发明使用一种缓解碎片产生的内存管理方法,实现内存高效、快速分配,并抑制内存碎片产生。使用本方法可以大大提高内存分配效率,减少内存碎片的产生。
本发明解决其技术问题所采用的技术方案是:
该内存管理方法包括两部分,一是缓存管理模块用于处理重复申请释放,二是内存池管理用于实际的内存分配与回收,其包括已使用池空间管理和未使用池空间管理两部分。用户向该内存管理方法申请内存,先将用户输入的申请内存大小进行4k对齐计算出申请对齐内存大小,根据对齐内存大小在缓存模块中查找与之相匹配大小的未使用缓存链表,若找到匹配大小的链表,则将缓存链表中的缓存项返回给用户;若未找到匹配大小的链表,则向内存池申请内存,将内存池返回的地址加入到已使用缓存链表中,并返回给用户。在向内存池申请内存过程,若发现内存池中未使用池空间已耗尽,则先回收缓存模块中未使用的缓存项,然后将回收内存页加入到未使用池空间链表里。最后再从内存池中重新划分空间。
实现缓解碎片产生的内存管理方法组成:
(1) 查找未使用缓存链表,若找到匹配大小的链表,则将地址返回给用户。
(2) 在未使用缓存链表中,没有找到匹配大小的链表,则向内存池请求内存空间。并将内存地址加入到已使用缓存链表,并将地址返回给用户。
(3) 向内存池请求空间,若有足够的空间,则将未使用池空间存入已使用池空间,并将内存页首地址返回给缓存管理模块。
(4) 向内存池请求空间,若没有足够的空间,则先回收未使用缓存链表中的最久未使用空间,将缓存链表中的内存加入到内存池中的未使用池空间链表中。然后再从未使用池空间链表重新分配给内存给缓存管理模块。
本发明与现有技术相比,所产生的有益效果是:
通过引入本内存管理方法,会减少因频繁申请释放内存产生的碎片,在申请、释放过程中提高分配、回收的效率。由于本方法具有内存回收机制,能有效避免因内存泄漏导致的资源耗尽现象。
附图说明
附图1是本发明的模块结构图;
附图2是组织形式组成的单链表图;
附图3是组织形式组成的两个双向链表图。
具体实施方式
本发明使用一种缓解碎片产生的内存管理方法,该发明主要包括:
(1) 内存重复使用缓存管理
组织形式,内存按4k对齐后的大小进行分类,并组成单链表。如图2所示:
申请流程,将申请的内存大小进行4k对齐后,在本缓存中查找未使用的内存,看是否有匹配的,若存在匹配的节点,则返回相应的内存地址,若没有匹配的节点,则像内存池申请空闲内存。
释放流程,将释放的内存按其大小插入到相应的单链表中(头插法)。
(1) 内存池管理
组织形式,将从系统中申请出来的一整块连续空间分割成若干个4k大小的内存块。组成两个双向链表,一个是已使用内存链表,一个是未使用内存链表。反应出空间的连续程度。如图3所示:
初始化申请流程,在初始化该模块时,一次从系统申请的足够大的内存空间。
逆初始化释放流程,在逆初始化该模块时,将初始化时从系统一次申请的内存空间换回系统。
分配流程,从内存池中分配4k对齐的空间,将该空间加入到已使用链表。
回收流程,当无法从内存池中分配足够空间时,先启动回收流程,将缓存中最久未使用的空间回收到内存池的未使用链表中。
Claims (1)
1.一种缓解碎片产生的内存管理方法,其特征在于包括两部分,一是缓存管理模块用于处理重复申请释放,二是内存池管理用于实际的内存分配与回收,其包括已使用池空间管理和未使用池空间管理两部分;
该方法组成:
(1)查找未使用缓存链表,若找到匹配大小的链表,则将地址返回给用户;
(2)在未使用缓存链表中,没有找到匹配大小的链表,则向内存池请求内存空间,并将内存地址加入到已使用缓存链表,并将地址返回给用户;
(3)向内存池请求空间,若有足够的空间,则将未使用池空间存入已使用池空间,并将内存页首地址返回给缓存管理模块;
(4)向内存池请求空间,若没有足够的空间,则先回收未使用缓存链表中的最久未使用空间,将缓存链表中的内存加入到内存池中的未使用池空间链表中;然后再从未使用池空间链表重新分配给内存给缓存管理模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410134861.9A CN104063328A (zh) | 2014-04-04 | 2014-04-04 | 一种缓解碎片产生的内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410134861.9A CN104063328A (zh) | 2014-04-04 | 2014-04-04 | 一种缓解碎片产生的内存管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104063328A true CN104063328A (zh) | 2014-09-24 |
Family
ID=51551049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410134861.9A Pending CN104063328A (zh) | 2014-04-04 | 2014-04-04 | 一种缓解碎片产生的内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104063328A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN109189695A (zh) * | 2018-08-31 | 2019-01-11 | 郑州云海信息技术有限公司 | 一种数据空间回收方法、装置及设备 |
CN112817766A (zh) * | 2021-02-22 | 2021-05-18 | 北京青云科技股份有限公司 | 一种内存管理方法、电子设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101122883A (zh) * | 2006-08-09 | 2008-02-13 | 中兴通讯股份有限公司 | 一种避免内存碎片化的内存分配方法 |
US7516291B2 (en) * | 2005-11-21 | 2009-04-07 | Red Hat, Inc. | Cooperative mechanism for efficient application memory allocation |
CN102521156A (zh) * | 2011-12-12 | 2012-06-27 | 云海创想信息技术(天津)有限公司 | 一种映射关系访问方法和装置 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
-
2014
- 2014-04-04 CN CN201410134861.9A patent/CN104063328A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7516291B2 (en) * | 2005-11-21 | 2009-04-07 | Red Hat, Inc. | Cooperative mechanism for efficient application memory allocation |
CN101122883A (zh) * | 2006-08-09 | 2008-02-13 | 中兴通讯股份有限公司 | 一种避免内存碎片化的内存分配方法 |
CN102521156A (zh) * | 2011-12-12 | 2012-06-27 | 云海创想信息技术(天津)有限公司 | 一种映射关系访问方法和装置 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN109189695A (zh) * | 2018-08-31 | 2019-01-11 | 郑州云海信息技术有限公司 | 一种数据空间回收方法、装置及设备 |
CN109189695B (zh) * | 2018-08-31 | 2021-11-19 | 郑州云海信息技术有限公司 | 一种数据空间回收方法、装置及设备 |
CN112817766A (zh) * | 2021-02-22 | 2021-05-18 | 北京青云科技股份有限公司 | 一种内存管理方法、电子设备及介质 |
CN112817766B (zh) * | 2021-02-22 | 2024-01-30 | 北京青云科技股份有限公司 | 一种内存管理方法、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Stehle et al. | A memory bandwidth-efficient hybrid radix sort on gpus | |
US9396030B2 (en) | Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications | |
CN101493787B (zh) | 一种内存操作的管理方法及系统 | |
CN102567107B (zh) | 高并行的实时内存资源管理调度方法 | |
CN103914265B (zh) | 集群细粒度内存管理方法 | |
CN104063328A (zh) | 一种缓解碎片产生的内存管理方法 | |
CN102307206B (zh) | 基于云存储的快速访问虚拟机镜像的缓存系统的缓存方法 | |
CN108038002A (zh) | 一种嵌入式软件内存管理方法 | |
CN102880555B (zh) | 面向实时系统的内存算法 | |
KR102077149B1 (ko) | 메모리 관리 방법 및 장치 | |
CN101968772B (zh) | 嵌入式系统高效内存池的实现方法 | |
CN103455433B (zh) | 内存管理方法及系统 | |
EP3304317B1 (en) | Method and apparatus for managing memory | |
CN101984417A (zh) | 内存管理方法及装置 | |
CN104090848A (zh) | 一种周期性大数据处理的内存管理方法及装置 | |
CN102761489A (zh) | 基于流水线模式的数据包零拷贝的核间通信方法 | |
CN104239249B (zh) | Pci‑e零拷贝dma数据传输方法 | |
CN104394096A (zh) | 一种基于多核处理器的报文处理方法及多核处理器 | |
CN106843753A (zh) | 一种分布式存储中协议使用缓存的方法及装置 | |
CN105975398A (zh) | 一种内存碎片管理方法 | |
CN103617123A (zh) | 一种通过内存块实现内存管理的方法及系统 | |
CN102053916B (zh) | 一种分配内核大片连续内存的方法 | |
CN104954400A (zh) | 云计算系统及其实现方法 | |
CN103729236A (zh) | 一种限制云计算用户资源使用额度的方法 | |
WO2014019358A1 (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140924 |
|
WD01 | Invention patent application deemed withdrawn after publication |