CN112328389B - 一种用于二叉树添加和删除结点的内存分配方法 - Google Patents
一种用于二叉树添加和删除结点的内存分配方法 Download PDFInfo
- Publication number
- CN112328389B CN112328389B CN202011084048.7A CN202011084048A CN112328389B CN 112328389 B CN112328389 B CN 112328389B CN 202011084048 A CN202011084048 A CN 202011084048A CN 112328389 B CN112328389 B CN 112328389B
- Authority
- CN
- China
- Prior art keywords
- nodes
- node
- binary tree
- shadow
- linked list
- 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.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 66
- 238000000034 method Methods 0.000 title claims abstract description 12
- 238000010586 diagram Methods 0.000 description 6
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于二叉树添加和删除结点的内存分配方法,该方法的二叉树中每个结点包含三个指针变量,一个父结点指针和两个子结点指针,为二叉树设置一个对应的链表用于构建二叉树的私有内存池,初始状态下链表为空。当向二叉树添加结点的操作从***分配内存时,分配两倍结点尺寸大小的内存块,即地址空间中连续的两个结点,一个首结点和一个尾结点,将首结点作为新增结点***二叉树,将尾结点标记为影子结点并作为空闲内存块放入二叉树对应的链表。
Description
技术领域
本发明涉及计算机***软件编程领域,特别是计算机基本数据结构中用于二叉树添加和删除结点的内存分配方法。
背景技术
在计算机软件编程领域,二叉树是一种常用的数据结构,用于通过键值对数据进行快速检索。常见的有AVL树、红黑树(RBTree)以及二元的基数树(RadixTree),这些二叉树添加和删除结点都需要通过***的全局内存池分配和释放内存块,在频繁添加和删除结点的应用场景中直接通过***分配和释放内存将造成很大的开销。常规的解决方案是为二叉树配置一个私有的内存池,二叉树删除结点时不会直接通过***释放内存,而是先放入二叉树的私有内存池,当私有内存池中空闲内存块积累到一定数量时再通过***释放内存。这样二叉树在添加结点时会先从私有内存池中找空闲内存块创建新结点,避免了频繁从***分配内存造成的开销,但有一个新的问题又产生了,那就是私有内存池中存放空闲内存块的上限是多少才合适的问题。若私有内存池中存放大量的空闲内存块将会导致内存资源的浪费,而存放的空闲内存块太少又起不到缓解***开销大的问题。
发明内容
本发明的目的是克服现有技术的上述不足而提供一种用于二叉树添加和删除结点时自动调整私有内存池空闲内存块数量的内存分配方法。
本发明的技术方案是:为二叉树设置一个对应的链表用于构建二叉树的私有内存池,初始状态下链表为空。二叉树中每个结点包含三个指针变量,一个父结点指针和两个子结点指针。当向二叉树添加结点的操作从***分配内存时,分配两倍结点尺寸大小的内存块,即地址空间中连续的两个结点,一个首结点和一个尾结点,将首结点作为新增结点***二叉树,将尾结点标记为影子结点(Shadow Node)并作为空闲内存块放入二叉树对应的链表。
当向二叉树添加结点时,若对应的链表不为空,则从链表中取出一个影子结点作为新增结点***二叉树。
当从二叉树删除结点时,若被删除的结点是影子结点,则将影子结点设置为空闲状态并放入二叉树对应的链表。
当从二叉树删除结点时,若被删除的结点不是影子结点,则检查对应的影子结点是否被占用,若未被占用,则将对应的影子结点从链表中取出,同被删除结点一并通过***释放其内存资源。
当从二叉树删除结点时,若被删除的结点对应的影子结点已被占用,则将影子结点的三个指针变量和数据迁移到被删除的结点,并用被删除的结点替换掉二叉树中对应的影子结点,然后将影子结点设置为空闲状态并放入二叉树对应的链表。另一种方案是:从链表中取出一个新的影子结点,将被占用的影子结点中三个指针变量和数据迁移到新的影子结点,并用新的影子结点替换掉二叉树中被占用的影子结点,然后将被删除的结点和对应的影子结点一并通过***释放其内存资源。
本发明与现有技术相比具有如下特点:发明阐述了一种用于二叉树添和加删除结点的内存分配方法,通过每次从***分配两倍结点尺寸大小的内存,将一半用于二叉树的新增结点,另一半标记为影子结点放入私有内存池来减少频繁添加删除结点时的***开销。和现有技术相比本发明有以下优势:一、首先保证了私有内存池中空闲内存的数量最多时不会超过二叉树中结点的数量,且随着二叉树中结点数量的减少而减少。二、因为每次通过***分配和释放两倍结点大小的内存,即使在最坏情况下***开销也要比传统方案减少一半。三、实施方案简单通用性强,可适用于任何种类的二叉树,不需要预分配池也不需要通过额外的算法来管理私有内存池。
以下结合附图和具体实施方式对本发明的详细结构作进一步描述。
附图说明
附图1为向二叉树添加结点的操作从***分配内存时,分配两倍结点尺寸大小的内存块;
附图2为向二叉树添加结点的操作从链表中取出影子结点a作为新增结点***二叉树;
附图3为从二叉树中删除影子结点d并放入二叉树对应的链表;
附图4为从二叉树中删除结点C,同时将影子结点c一起释放;
附图5为从二叉树中删除结点D,将影子结点d的数据迁移到结点D;
附图6为从二叉树中删除结点D,将影子结点d的数据迁移到影子结点a;
其中,大写字母表示结点,小写字母表示其对应的影子结点。
附图5及附图6中,“”表示数据迁移。
具体实施方式
如附图1所示:当向二叉树102添加结点的操作从***内存池101分配内存时,分配两倍结点尺寸大小的内存块104,内存块104包含结点C和影子结点c。将结点C作为新增结点***二叉树102,将影子结点c作为空闲内存块放入二叉树102对应的链表103。
如附图2所示:当向二叉树202添加结点时,从对应的链表201中取出一个影子结点a作为新增结点***二叉树202。
如附图3所示:当从二叉树302删除影子结点d时,将被删除的影子结点d设置为空闲状态并放入二叉树302对应的链表301。
如附图4所示:当从二叉树402删除结点C时,被删除的结点C对应的影子结点c未被占用,将影子结点c从链表403中取出,同结点C组成的内存块404释放到***内存池401中。
如附图5所示:当从二叉树502删除结点D时,被删除的结点D对应的影子结点d已被占用,将影子结点d的数据迁移到结点D,然后将影子结点d设置为空闲状态放入二叉树502对应的链表501,同时将结点D替换到影子结点d的位置变为二叉树503。
如附图6所示:当从二叉树602删除结点D时,被删除的结点D对应的影子结点d已被占用,先从对应的链表601取出影子结点a,将影子结点d的数据迁移到影子结点a,然后将影子结点d和结点D组成的内存块604释放到***内存池605中,同时将影子结点a替换到影子结点d的位置变为二叉树603。
Claims (5)
1.一种用于二叉树添加和删除结点的内存分配方法,该方法的二叉树中每个结点包含三个指针变量,一个父结点指针和两个子结点指针,其特征在于:为二叉树设置一个对应的链表用于构建二叉树的私有内存池,初始状态下链表为空;当向二叉树添加结点的操作从***分配内存时,分配两倍结点尺寸大小的内存块,即地址空间中连续的两个结点,一个首结点和一个尾结点,将首结点作为新增结点***二叉树,将尾结点标记为影子结点并作为空闲内存块放入二叉树对应的链表;当从二叉树删除结点时,若被删除的结点不是影子结点,则检查对应的影子结点是否被占用,若未被占用,则将对应的影子结点从链表中取出,同被删除的结点一并通过***释放其内存资源。
2.根据权利要求1所述的一种用于二叉树添加和删除结点的内存分配方法,其特征是:当向二叉树添加结点时,若对应的链表不为空,则从链表中取出一个影子结点作为新增结点***二叉树。
3.根据权利要求1所述的一种用于二叉树添加和删除结点的内存分配方法,其特征是:当从二叉树删除结点时,若被删除的结点是影子结点,则将影子结点设置为空闲状态并放入二叉树对应的链表。
4.根据权利要求1所述的一种用于二叉树添加和删除结点的内存分配方法,其特征是:当从二叉树删除结点时,若被删除的结点对应的影子结点已被占用,则将影子结点的三个指针变量和数据迁移到被删除的结点,并用被删除的结点替换掉二叉树中对应的影子结点,然后将影子结点设置为空闲状态并放入二叉树对应的链表。
5.根据权利要求1所述的一种用于二叉树添加和删除结点的内存分配方法,其特征是:当从二叉树删除结点时,若被删除的结点对应的影子结点已被占用且对应的链表不为空,则从链表中取出一个新的影子结点,将被占用的影子结点中三个指针变量和数据迁移到新的影子结点,并用新的影子结点替换掉二叉树中被占用的影子结点,然后将被删除的结点和对应的影子结点一并通过***释放其内存资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011084048.7A CN112328389B (zh) | 2020-10-12 | 2020-10-12 | 一种用于二叉树添加和删除结点的内存分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011084048.7A CN112328389B (zh) | 2020-10-12 | 2020-10-12 | 一种用于二叉树添加和删除结点的内存分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112328389A CN112328389A (zh) | 2021-02-05 |
CN112328389B true CN112328389B (zh) | 2024-04-30 |
Family
ID=74314779
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011084048.7A Active CN112328389B (zh) | 2020-10-12 | 2020-10-12 | 一种用于二叉树添加和删除结点的内存分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112328389B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115658561B (zh) * | 2022-11-16 | 2023-03-14 | 石家庄科林电气股份有限公司 | 配电终端内存管理方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1993025958A1 (en) * | 1992-06-05 | 1993-12-23 | Amalgamated Software Of North America, Inc. | Method of sorting and compressing data |
CN102866954A (zh) * | 2012-08-31 | 2013-01-09 | 华为技术有限公司 | 内存分配的方法及装置 |
CN102945163A (zh) * | 2012-10-29 | 2013-02-27 | 桂林电子科技大学 | 一种用于嵌入式***的信号槽结构 |
CN102999434A (zh) * | 2011-09-15 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种内存管理方法及装置 |
CN103176907A (zh) * | 2011-12-22 | 2013-06-26 | 北京新媒传信科技有限公司 | 一种内存管理的方法和*** |
WO2014033606A2 (en) * | 2012-08-31 | 2014-03-06 | Pradeep Varma | Systems and methods of memory and access management |
WO2016011811A1 (zh) * | 2014-07-21 | 2016-01-28 | 深圳市中兴微电子技术有限公司 | 一种内存管理方法、装置及存储介质 |
CN107656993A (zh) * | 2017-09-15 | 2018-02-02 | 上海斐讯数据通信技术有限公司 | 一种实现进程间avl树使用的方法及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7779016B2 (en) * | 2006-09-14 | 2010-08-17 | International Business Machines Corporation | Parallel execution of operations for a partitioned binary radix tree on a parallel computer |
US20170364844A1 (en) * | 2016-06-16 | 2017-12-21 | Vmware, Inc. | Automated-application-release-management subsystem that supports insertion of advice-based crosscutting functionality into pipelines |
-
2020
- 2020-10-12 CN CN202011084048.7A patent/CN112328389B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1993025958A1 (en) * | 1992-06-05 | 1993-12-23 | Amalgamated Software Of North America, Inc. | Method of sorting and compressing data |
CN102999434A (zh) * | 2011-09-15 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种内存管理方法及装置 |
CN103176907A (zh) * | 2011-12-22 | 2013-06-26 | 北京新媒传信科技有限公司 | 一种内存管理的方法和*** |
CN102866954A (zh) * | 2012-08-31 | 2013-01-09 | 华为技术有限公司 | 内存分配的方法及装置 |
WO2014033606A2 (en) * | 2012-08-31 | 2014-03-06 | Pradeep Varma | Systems and methods of memory and access management |
CN102945163A (zh) * | 2012-10-29 | 2013-02-27 | 桂林电子科技大学 | 一种用于嵌入式***的信号槽结构 |
WO2016011811A1 (zh) * | 2014-07-21 | 2016-01-28 | 深圳市中兴微电子技术有限公司 | 一种内存管理方法、装置及存储介质 |
CN107656993A (zh) * | 2017-09-15 | 2018-02-02 | 上海斐讯数据通信技术有限公司 | 一种实现进程间avl树使用的方法及*** |
Non-Patent Citations (3)
Title |
---|
Efficient Tree Layout in a Multilevel Memory Hierarchy;Stephen Alstrup et.al;《https://arxiv.org/pdf/cs/0211010v1.pdf》;全文 * |
二叉树的静态二叉链表存储;索红军;;渭南师范学院学报(02);全文 * |
利用二叉树的思想来实现分配和释放内存方法;流风回雪1988;《CSDN:https://blog.csdn.net/zwl1584671413/article/details/78195849》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112328389A (zh) | 2021-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10642515B2 (en) | Data storage method, electronic device, and computer non-volatile storage medium | |
JP4117265B2 (ja) | ファイルシステムのバージョンを管理する方法およびシステム | |
CN106682215B (zh) | 一种数据处理方法和管理节点 | |
WO2016187974A1 (zh) | 一种存储空间管理方法及装置 | |
US20170083406A1 (en) | Method and apparatus for incremental backup | |
US10649967B2 (en) | Memory object pool use in a distributed index and query system | |
CN107783988A (zh) | 一种目录树的加锁方法及设备 | |
CN112328389B (zh) | 一种用于二叉树添加和删除结点的内存分配方法 | |
CN103455433A (zh) | 内存管理方法及*** | |
CN113805816B (zh) | 一种磁盘空间管理方法、装置、设备及存储介质 | |
CN108984102B (zh) | 管理存储***的方法、***和计算机程序产品 | |
CN104731872A (zh) | 基于位图的存储空间管理***及其方法 | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN117271531B (zh) | 一种数据存储方法、***、设备及介质 | |
CN112799588B (zh) | 使用外部存储加载容器集群应用数据时的数据存储方法 | |
CN116662019B (zh) | 请求的分配方法、装置、存储介质及电子装置 | |
KR20090007926A (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 | |
CN114443598A (zh) | 写数据方法、装置、计算机设备及存储介质 | |
CN112346848A (zh) | 一种管理内存池的方法、装置及终端 | |
CN110209489B (zh) | 一种适用于内存页结构的内存管理方法及装置 | |
CN107111549A (zh) | 一种文件***的管理方法及装置 | |
CN115495210A (zh) | 一种Linux***下定时器的实现方法及装置 | |
US7904419B1 (en) | Managing allocation of temporary and permanent files in a database system | |
CN114115699A (zh) | 一种数据处理方法、装置及*** | |
CN111984691A (zh) | 一种分布式存储***中对象元数据检索列举方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |