CN103617123A - 一种通过内存块实现内存管理的方法及系统 - Google Patents
一种通过内存块实现内存管理的方法及系统 Download PDFInfo
- Publication number
- CN103617123A CN103617123A CN201310590518.0A CN201310590518A CN103617123A CN 103617123 A CN103617123 A CN 103617123A CN 201310590518 A CN201310590518 A CN 201310590518A CN 103617123 A CN103617123 A CN 103617123A
- Authority
- CN
- China
- Prior art keywords
- block
- memory
- sub
- address
- divided
- 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
Images
Landscapes
- Memory System (AREA)
Abstract
本发明公开了一种通过内存块实现内存管理的方法及系统,申请64KB大小的内存块,将此内存块分为内存分配区和数据存放区两个区域,将内存分配区划分为以链表形式连接的固定大小的子块,将链表的头指针和空闲子块的数量写入数据存放区,之后通过链表操作即可实现内存的分配与回收。本发明通过申请64KB的内存块,以链表的形式进行内存单元的分配与回收,减少甚至消除了内存分配时可能产生的碎片,链表方式,结构比较简单,无论是分配还是回收内存,省去了传统方法中遍历、查询上的复杂操作,明显提升了内存的处理速度,有效提升了内存管理的效率。
Description
技术领域
本发明涉及内存信息技术管理领域,特别是一种通过内存块实现内存管理的方法及系统。
背景技术
内存管理在软件开发和应用中占据十分重要的位置,对于软件的性能有着十分重要的影响。由于操作系统要考虑到底层硬件管理、内存有限、内存碎片、多软件同时运行、多线程环境等情况,因此导致了内存的分配和回收操作非常复杂,内存操作所消耗的时间的限制成为软件性能的瓶颈。对此一些传统的方法是通过申请一块大内存,再划分成各个子块分配使用,但传统方法忽略了子块的组织结构,在分配和回收时都需要进行大量的内存块结构查询,才能完成分配和回收操作,这就导致了内存管理效率的低下。在多线程环境中这种影响尤其明显,直接导致了应用软件的性能低下。在高性能软件应用领域,内存管理是关键性的基础功能,其性能直接影响了整个应用软件系统的运行。
发明内容
为解决上述问题,本发明的目的在于提供一种通过内存块实现内存管理的方法及系统,简化内存的分配与回收,减少内存分配时碎片的产生,提高内存管理效率,尤其是对于高性能软件的应用,提升整个软件系统的运行效率。
本发明解决其问题所采用的技术方案是:
一种通过内存块实现内存管理的方法,包括:
(1)以字节对齐方式申请64KB大小的内存块,
(2)将此内存块划分为以链表形式连接的固定大小的子块,同时划分出一个单独的数据存放区,且数据存放区在内存地的末端,将链表的头指针和空间的子块数量写入数据存放区;
(3)通过链表操作对子块空间进行分配与回收:
分配时,将链表头指针指向的子块分配出去,且空闲子块数量减1,同时链表头指针指向下一个空闲子块,如果空闲子块数量为零,则重新执行步骤(1);
回收时,将链表的头指针存入要回收的子块内,将此要回收的子块的首地址作为链表的头指针写入数据存放区,并将空闲子块数量加1。
一种通过内存块实现内存管理的系统,包括:
申请模块,用于以对齐方式申请64KB大小的内存块;
拆分模块,用于将此内存块划分为内存分配区和数据存放区两个内存区域,同时将内存分配区划分为链表形式连接的固定大小的子块,并将空闲子块的数量和链表头指针写入数据存放区;
操作模块,用于通过链表操作对子块空间进行分配与回收。
所述操作模块包括分配单元和回收单元,其中:
分配单元用于通过链表操作对子块空间进行分配时,将链表头指针指向的子块分配出去,且空闲子块数量减1,同时链表头指针指向下一个空闲子块;
回收单元用于通过链表操作对子块空间进行回收时,将要回收的子块地址的低16位地址清零,得到该子块在内存块中的首地址,将链表的头指针存入要回收的子块内,将此要回收的子块的首地址作为链表的头指针写入数据存放区,并将空闲子块数量加1。
本发明的有益效果是:
本发明采用一种通过内存块实现内存管理的方法及系统,申请64KB大小的内存块,将此内存块分为内存分配区和数据存放区两个区域,将内存分配区划分为以链表形式连接的固定大小的子块,将链表的头指针和空闲子块的数量写入数据存放区,之后通过链表操作即可实现内存的分配与回收。本发明通过申请64KB的内存块,以链表的形式进行内存单元的分配与回收,减少甚至消除了内存分配时可能产生的碎片,链表方式,结构比较简单,无论是分配还是回收内存,省去了传统方法中遍历、查询上的复杂操作,明显提升了内存的处理速度,有效提升了内存管理的效率。
附图说明
下面结合附图和实例对本发明作进一步说明。
图1是所述内存块划分后的示意图;
图2是本发明所述方法流程图;
图3是本发明所述系统的结构组成框图;
图4是分配子块后的示意图;
图5是删除子块后的示意图。
具体实施方式
实施例1:
本发明提供了一种通过内存块实现内存管理的方法,每次以字节对齐的方式申请64KB大小的内存块,将此内存块划分为两个区域:内存分配区和数据存放区。具体参照图1所示划分后的示意图,划分后,内存分配区与数据存放区的大小固定,之后,继续对内存分配区进行划分,将其划分为以链表形式连接的具有固定大小的子块,由于划分时,最后一个子块的大小可能不足一个子块的大小,将其归为未使用区域,如图中所示,每个子块存放着下一个子块的地址,形成一个链表。将链表的头指针和链表中空闲子块的数量写入数据存放区当中,数据存放区所需要分配的空间比较小,只要满足存放头指针和空闲子块的数量即可。
对内存块分配之后,便可通过链表操作实现子块的分配与收回,具体方法参照图2所示的流程图:
以字节对齐的方式申请64KB大小的内存块,由于是以字节对齐的方式申请,因此内存块的首地址格式为:0x????0000,其中问号表示十六进制中的任意数字,即内存块的首地址低16位字节全为0;
之后,对内存块进行划分和结构组织操作,划出一部分大小用于存储内存块的数据信息,称为块数据存放区,剩下部分被称为内存分配区;数据存放区具备固定的大小,里面存放着第一个空闲子块的地址(即链表头指针),以及空闲子块的数量以及其他数据;为便于定位,数据存放区位于64KB内存块的末端,其位于内存块的地址可通过以下计算方法计算:64KB内存块的首地址加上64KB字节减去数据存放区大小;内存分配区位于64KB内存块的起始地址,并按特定的大小平均划分成多个子块,而不足一个子块大小的区域称为未使用区域,各个子块存放着下一个子块的地址,形成一个链表;
当需要使用子块空间时,如果数据存放区域记载的当前空闲子块的数量大于零,则将当前链表头指针指向的子块分配出去,并将空闲子块数量减1,链表头指针指向下一个空闲子块;否则,若空闲子块数量为零,则重新向操作系统申请一块64KB大小的内存块,进行组织划分和分配;
当需要对子块进行回收时,回收其在内存块中的内存地址即可,将此需要回收的子块的内存地址的低16位清零,即得到其所在的64KB内存块的首地址,将当前链表的头指针存入要回收的子块内,将此要回收的子块的首地址作为链表的头指针写入数据存放区,并将空闲子块数量加1。
本发明采用64KB固定大小的内存块申请策略,将子块的链表组织及数据信息存放于此内存块中,使每一个内存块的首地址基于页对齐,提高了内存申请的效率,并且所有操作都在一个64KB内存块中进行,得以高效利用CPU缓存。在分配和回收过程中,通过访问和操作链表头指针和空闲块数量,即能完成分配和回收操作过程,省去了大量的内存地址检索和查询,明显的提高了内存管理操作性能。
本发明提供了一种通过内存块实现内存管理的系统,参照图3所示,包括:
申请模块,用于以对齐方式申请64KB大小的内存块;
拆分模块,用于将此内存块划分为内存分配区和数据存放区两个内存区域,且数据存放区被划分在内存块地址的末端,同时将内存分配区划分为链表形式连接的固定大小的子块,并将空闲子块的数量和链表头指针写入数据存放区;
操作模块,用于通过链表操作对子块空间进行分配与回收。
其中,所述操作模块包括分配单元和回收单元,且:
分配单元用于通过链表操作对子块空间进行分配时,将链表头指针指向的子块分配出去,且空闲子块数量减1,同时链表头指针指向下一个空闲子块;
回收单元用于通过链表操作对子块空间进行回收时,将要回收的子块地址的低16位地址清零,得到该子块在内存块中的首地址,将链表的头指针存入要回收的子块内,将此要回收的子块的首地址作为链表的头指针写入数据存放区,并将空闲子块数量加1。
所述系统具体的实现方法与以上方法中所述相同,具体参考以上方法中所述内容。
实施例2:
本实施例通过具有的实例对本发明进行说明。
参照图4所示,首先以字节对齐的方式向操作系统申请64KB(65536字节)大小的内存块,内存块末端20个字节划分为数据存放区,其余的作为内存分配区,内存分配区中每个子块的大小设定为16字节,则子块的数量为(65536字节-数据存放区大小)/子块大小,即:(65536字节-20字节)/16字节=4094,则子块数量为4094个,剩余的12字节则不使用。
在确定了子块数量之后,从第一个子块开始,将下一个子块的内存地址存放于其中,形成一个链表,再将链表的头指针,即第一个子块的地址存放于数据存放区中指定位置,并将子块数量即4094存放于数据存放区中指定位置。至此,整个64KB内存块已经划分组织完成。
分配子块时,首先查询数据存放区中的空闲子块数量,如果等于0,则表示子块已经全部分配,需要重新再申请一个64KB内存块。如果子块数量大于0,则此时头指针指向的子块就是要分配的子块,称为当前分配块,将头指针指向当前分配块保存的子块地址,即下一个子块的地址,再将子块数量减1,最后返回当前分配块,这样就完成了整个分配过程。图4中所分配的4个子块即如此。
参照图4回收子块1和4后的示意图,回收子块时,此子块称为当前回收块,首先将当前回收块的内存地址低16位清零,从而得到其在64KB内存块的首地址,由首地址得到末端数据存放区的计算公式为:首地址+65536字节-数据存放区大小。得到数据存放区之后,将头指针指向的子块地址存放于当前回收块中,再将当前回收块的首地址存放于头指针,再将子块数量加1,这样就完成了整个回收过程。
以上实施例中本发明所述内容,只是对本发明的一种客观解释,本发明不仅应用于操作系统内存的分配,对于其它移动设备或具有大容量存储单元的设备,本发明皆可实现,本发明的内容所要保护的不仅是本发明所述的技术领域,类似的可使用本发明实现其目的的其他领域或实现方法,均在本发明的保护范围之内。
Claims (10)
1.一种通过内存块实现内存管理的方法,其特征在于,包括:
(1)申请固定大小的内存块;
(2)将此内存块划分为以链表形式连接的固定大小的子块;
(3)通过链表操作对子块空间进行分配与回收。
2.根据权利要求1所述的方法,其特征在于,步骤(2)中,所述内存块在被划分时,还被划分出一个单独的数据存放区,用于存储空闲子块的数量和链表头指针。
3.根据权利要求2所述的方法,其特征在于,步骤(3)中,通过链表操作对子块空间进行分配时,将链表头指针指向的子块分配出去,且空闲子块数量减1,同时链表头指针指向下一个空闲子块。
4.根据权利要求3所述的方法,其特征在于,当空闲子块数量为零时,则重新执行步骤(1)。
5.根据权利要求2所述的方法,其特征在于,步骤(3)中,通过链表操作对子块空间进行回收时,将链表的头指针存入要回收的子块内,将此要回收的子块的首地址作为链表的头指针写入数据存放区,并将空闲子块数量加1。
6.根据权利要求2所述的方法,其特征在于,所述数据存放区被划分在内存块地址的末端。
7.根据权利要求1至6任一所述的方法,其特征在于,所述步骤(1)中,以字节对齐的方式申请64KB大小的内存块。
8.一种通过内存块实现内存管理的系统,其特征在于,包括:
申请模块,用于以对齐方式申请64KB大小的内存块;
拆分模块,用于将此内存块划分为内存分配区和数据存放区两个内存区域,同时将内存分配区划分为链表形式连接的固定大小的子块,并将空闲子块的数量和链表头指针写入数据存放区;
操作模块,用于通过链表操作对子块空间进行分配与回收。
9.根据权利要求8所述的系统,其特征在于,所述操作模块包括分配单元和回收单元,其中:
分配单元用于通过链表操作对子块空间进行分配时,将链表头指针指向的子块分配出去,且空闲子块数量减1,同时链表头指针指向下一个空闲子块;
回收单元用于通过链表操作对子块空间进行回收时,将要回收的子块地址的低16位地址清零,得到该子块在内存块中的首地址,将链表的头指针存入要回收的子块内,将此要回收的子块的首地址作为链表的头指针写入数据存放区,并将空闲子块数量加1。
10.根据权利要求8或9所述的系统,其特征在于,所述数据存放区被划分在内存块地址的末端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310590518.0A CN103617123A (zh) | 2013-11-21 | 2013-11-21 | 一种通过内存块实现内存管理的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310590518.0A CN103617123A (zh) | 2013-11-21 | 2013-11-21 | 一种通过内存块实现内存管理的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103617123A true CN103617123A (zh) | 2014-03-05 |
Family
ID=50167826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310590518.0A Pending CN103617123A (zh) | 2013-11-21 | 2013-11-21 | 一种通过内存块实现内存管理的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103617123A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104199781A (zh) * | 2014-08-14 | 2014-12-10 | 深圳百科信息技术有限公司 | 一种基于共享内存的内存碎片分配方法和装置 |
CN106201910A (zh) * | 2016-08-27 | 2016-12-07 | 浪潮(北京)电子信息产业有限公司 | 一种小块内存的管理方法和装置 |
CN106845075A (zh) * | 2016-12-20 | 2017-06-13 | 杭州联众医疗科技股份有限公司 | 一种集中诊断报告系统 |
CN110532198A (zh) * | 2019-09-09 | 2019-12-03 | 成都西山居互动娱乐科技有限公司 | 一种存储空间分配的方法及装置 |
CN110955496A (zh) * | 2019-11-26 | 2020-04-03 | 浙江大华技术股份有限公司 | 内存处理方法及装置、存储介质、电子装置 |
CN113821191A (zh) * | 2021-10-13 | 2021-12-21 | 芯河半导体科技(无锡)有限公司 | 一种可配置fifo深度的装置及方法 |
CN114219700A (zh) * | 2022-02-23 | 2022-03-22 | 广州匠芯创科技有限公司 | 一种图像处理方法、系统、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1505330A (zh) * | 2002-12-02 | 2004-06-16 | 深圳市中兴通讯股份有限公司上海第二 | 一种内存管理方法 |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
CN101493787A (zh) * | 2009-02-18 | 2009-07-29 | 中兴通讯股份有限公司 | 一种内存操作的管理方法及系统 |
US20130263149A1 (en) * | 2012-03-28 | 2013-10-03 | International Business Machines Corporation | Dynamically Adjusting Global Heap Allocation in Multi-Thread Environment |
-
2013
- 2013-11-21 CN CN201310590518.0A patent/CN103617123A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1505330A (zh) * | 2002-12-02 | 2004-06-16 | 深圳市中兴通讯股份有限公司上海第二 | 一种内存管理方法 |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
CN101493787A (zh) * | 2009-02-18 | 2009-07-29 | 中兴通讯股份有限公司 | 一种内存操作的管理方法及系统 |
US20130263149A1 (en) * | 2012-03-28 | 2013-10-03 | International Business Machines Corporation | Dynamically Adjusting Global Heap Allocation in Multi-Thread Environment |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104199781A (zh) * | 2014-08-14 | 2014-12-10 | 深圳百科信息技术有限公司 | 一种基于共享内存的内存碎片分配方法和装置 |
CN106201910A (zh) * | 2016-08-27 | 2016-12-07 | 浪潮(北京)电子信息产业有限公司 | 一种小块内存的管理方法和装置 |
CN106845075A (zh) * | 2016-12-20 | 2017-06-13 | 杭州联众医疗科技股份有限公司 | 一种集中诊断报告系统 |
CN106845075B (zh) * | 2016-12-20 | 2021-07-20 | 杭州联众医疗科技股份有限公司 | 一种集中诊断报告系统 |
CN110532198A (zh) * | 2019-09-09 | 2019-12-03 | 成都西山居互动娱乐科技有限公司 | 一种存储空间分配的方法及装置 |
CN110532198B (zh) * | 2019-09-09 | 2023-08-08 | 成都西山居互动娱乐科技有限公司 | 一种存储空间分配的方法及装置 |
CN110955496A (zh) * | 2019-11-26 | 2020-04-03 | 浙江大华技术股份有限公司 | 内存处理方法及装置、存储介质、电子装置 |
CN113821191A (zh) * | 2021-10-13 | 2021-12-21 | 芯河半导体科技(无锡)有限公司 | 一种可配置fifo深度的装置及方法 |
CN114219700A (zh) * | 2022-02-23 | 2022-03-22 | 广州匠芯创科技有限公司 | 一种图像处理方法、系统、设备及介质 |
CN114219700B (zh) * | 2022-02-23 | 2022-06-03 | 广州匠芯创科技有限公司 | 一种图像处理方法、系统、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103617123A (zh) | 一种通过内存块实现内存管理的方法及系统 | |
CN100590609C (zh) | 一种基于非连续页的动态内存管理方法 | |
CN104636285B (zh) | 一种闪存存储系统及其读写、删除方法 | |
CN102792285B (zh) | 用于处理数据的装置和方法 | |
CN101692252B (zh) | 文件空闲块的分配和回收方法 | |
CN102163175B (zh) | 一种基于局部性分析的混合地址映射方法 | |
US9513815B2 (en) | Memory management based on usage specifications | |
CN109388590B (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
US20130117503A1 (en) | Servicing non-block storage requests | |
CN1996258A (zh) | 一种动态内存池的实现方法 | |
CN101488919B (zh) | 存储地址分配方法和装置 | |
CN104731799A (zh) | 内存数据库管理装置 | |
CN112632069B (zh) | 哈希表数据存储管理方法、装置、介质和电子设备 | |
US20190042462A1 (en) | Checkpointing for dram-less ssd | |
CN115080455B (zh) | 一种计算机芯片、计算机板卡、存储空间分配方法及装置 | |
CN105095099A (zh) | 一种基于内存页位图变更的大内存页整合方法 | |
CN103678166A (zh) | 一种采用固态硬盘作为计算机高速缓存的实现方法及系统 | |
CN103218305A (zh) | 存储空间的分配方法 | |
CN111694765A (zh) | 一种面向移动应用特征的非易失性内存文件系统多粒度空间管理方法 | |
CN106201918B (zh) | 一种基于大数据量和大规模缓存快速释放的方法和系统 | |
CN103198021A (zh) | 一种提高固态硬盘数据传输效率的方法 | |
CN103823634A (zh) | 一种支持无随机写模式的数据处理方法及系统 | |
CN104317735A (zh) | 大容量缓存及数据存储和读取、内存分配和回收的方法 | |
CN103514098B (zh) | 用于回收存储空间的方法和系统 | |
CN102521157B (zh) | 一种在fpga上实现板载存储资源管理的系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140305 |