CN116991595B - 一种基于Bitmap的内存分配方法、装置、设备及介质 - Google Patents
一种基于Bitmap的内存分配方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN116991595B CN116991595B CN202311256978.XA CN202311256978A CN116991595B CN 116991595 B CN116991595 B CN 116991595B CN 202311256978 A CN202311256978 A CN 202311256978A CN 116991595 B CN116991595 B CN 116991595B
- Authority
- CN
- China
- Prior art keywords
- data structure
- bitmap data
- memory
- bits
- space
- 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 185
- 238000000034 method Methods 0.000 title claims abstract description 45
- 238000013467 fragmentation Methods 0.000 abstract description 9
- 238000006062 fragmentation reaction Methods 0.000 abstract description 9
- 239000002699 waste material Substances 0.000 abstract description 3
- 238000013500 data storage Methods 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 239000012634 fragment Substances 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 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
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据存储技术领域,公开了一种基于Bitmap的内存分配方法、装置、设备及介质,该方法包括:将内存空间均分为多个内存块;根据内存块的空间大小,建立Bitmap数据结构,并初始化Bitmap数据结构;确定待分配数据所需的分配空间和起始地址;根据分配空间,确定所需的bit数量;基于起始地址,统计Bitmap数据结构的头部,是否存在满足所需的bit数量的连续的二进制位为0的位数;在Bitmap数据结构的头部,满足所需的bit数量的情况下,向待分配数据分配所需的分配空间。不仅提高了分配效率,较传统算法有大幅度的性能提升,同时不会产生内存碎片问题,造成空间浪费的情况。
Description
技术领域
本发明涉及数据存储技术领域,具体涉及一种基于Bitmap的内存分配方法、装置、设备及介质。
背景技术
内存分配方法是指在应用程序执行的过程中分配或者回收存储空间的内存管理方法。内存分配是现代计算机操作系统中的一个重要功能。在某些异构平台上,设备端通常存在一块高速片上内存空间,具有较快的数据传输效率,在合理使用的情况下,可以加速数据处理速度,提高程序的整体性能。但通常此类内存存储空间有限,需要合理并且高效地分配内存,这就对于高性能内存分配算法提出了比较高的要求。
目前,采用bitmap的内存分配算法,在分配大块连续内存时,需要逐个遍历bitmap中的二进制位,来查找是否存在连续的可分配块,该过程不仅耗时,而且分配效率低。
发明内容
有鉴于此,本发明提供了一种基于Bitmap的内存分配方法、装置、设备及介质,以解决现有技术中分配效率低的问题。
第一方面,本发明提供了一种基于Bitmap的内存分配方法,包括:
将内存空间均分为多个内存块;
根据内存块的空间大小,建立Bitmap数据结构,并初始化Bitmap数据结构,Bitmap数据结构为由二进制位组成的结构,Bitmap数据结构中的每个二进制位表征内存块的分配状态;分配状态包括已分配状态与未分配状态;Bitmap数据结构中的二进制位表征处于已分配状态时,二进制位为1、Bitmap数据结构中的二进制位表征处于未分配状态时,二进制位为0;
确定待分配数据所需的分配空间和起始地址;
根据分配空间,确定所需的bit数量;
基于起始地址,统计Bitmap数据结构的头部,是否存在满足所需的bit数量的连续的二进制位为0的位数;
在Bitmap数据结构的头部,满足所需的bit数量的情况下,向待分配数据分配所需的分配空间。
采用移位运算和硬件的机器指令进行组合,利用“数头零”的方法,即可读取头部的所有零的数量,而无需逐个遍历bit,不仅提高了分配效率,而且不容易导致内存块之间出现碎片问题,造成空间浪费的情况。尤其在大内存分配和多次内存分配情况下,本实施例中提供的分配方法,较传统算法有大幅度的性能提升,同时并未产生内存碎片问题。
在一种可选的实施方式中,在Bitmap数据结构的头部不存在满足所需的bit数量的连续的二进制位为0的位数的情况下,采用移位运算,将同一二进制位的位进行偏移,直至Bitmap数据结构的头部存在满足所需的bit数量的连续的二进制位为0的位数。
可以采用移位、数零的方法统计所需的bit数量,无需逐个遍历以及增加循环次数,提高了分配效率,且避免了碎片问题。
在一种可选的实施方式中,统计Bitmap数据结构的头部,是否存在满足所需的bit数量的连续的二进制位为0的位数,包括:
获取Bitmap数据结构的头部的第一个二进制位地址及预先设置的“数头零”指令;
从地址开始,执行“数头零”指令,依次扫描二进制位;
在扫描到第一个非零位的情况下,确定连续的二进制位为0的位数。
算法中的数值操作均使用位运算或硬件指令完成,避免了传统的数学运算,对于算法的整体性能大有益处,且提高了统计效率。
在一种可选的实施方式中,在扫描到第一个非零位的情况下,确定连续的二进制位为0的位数之后,包括:
对Bitmap数据结构进行取反运算;
对取反后的Bitmap数据结构,进行移位运算;
对移位后的Bitmap数据结构,再次进行取反运算;
对再次进行取反运算后的Bitmap数据结构,执行“数头零”指令。
用到的取反、移位、数零指令均有硬件支持,可以避免传统的数学运算,对于算法的整体性能大有益处,且分配效率高。
在一种可选的实施方式中,建立的Bitmap数据结构为两个;
其中一个Bitmap数据结构用于表征起始地址,另一个Bitmap数据结构用于表征内存块的所有二进制位。
采用两个bitmap数据结构,同样大小的bitmap可以表示更大的内存块。有利于算法优化,在连续多次内存分配的时候会大大提高效率。
在一种可选的实施方式中,方法,还包括:
获取待释放空间的起始地址;
基于起始地址,确定待释放空间的大小;
对待释放空间进行释放。
第二方面,本发明提供了一种基于Bitmap的内存分配装置,装置包括:
划分模块,用于将内存空间均分为多个内存块;
建立模块,用于根据内存块的空间大小,建立Bitmap数据结构,并初始化Bitmap数据结构,Bitmap数据结构为由二进制位组成的结构,Bitmap数据结构中的每个二进制位表征内存块的分配状态;分配状态包括已分配状态与未分配状态;Bitmap数据结构中的二进制位表征处于已分配状态时,二进制位为1、Bitmap数据结构中的二进制位表征处于未分配状态时,二进制位为0;
第一确定模块,用于确定待分配数据所需的分配空间和起始地址;
第二确定模块,用于根据分配空间,确定所需的bit数量;
统计模块,用于基于起始地址,统计Bitmap数据结构的头部,是否存在满足所需的bit数量的连续的二进制位为0的位数;
分配模块,用于在Bitmap数据结构的头部,满足所需的bit数量的情况下,向待分配数据分配所需的分配空间;在Bitmap数据结构的头部不存在满足所需的bit数量的连续的二进制位为0的位数的情况下,采用移位运算,将同一二进制位的位进行偏移,直至Bitmap数据结构的头部存在满足所需的bit数量的连续的二进制位为0的位数。
第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的基于Bitmap的内存分配方法。
第四方面,本发明提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的基于Bitmap的内存分配方法。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的基于Bitmap的内存分配方法的流程示意图;
图2是根据本发明实施例的Bitmap数据结构的示意图;
图3是根据本发明实施例的基于Bitmap的内存分配方法中部分步骤的流程示意图;
图4是根据本发明实施例的基于Bitmap的内存分配方法中又一部分步骤的流程示意图;
图5是根据本发明实施例的基于Bitmap的内存分配装置的结构框图;
图6是本发明实施例的计算机设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在一些技术中,对于一次内存分配需求,用户给定内存需求空间后,若采用传统的bitmap的内存分配算法,内存分配时需要逐bit遍历bitmap,每次遍历都需要统计0bit的数量,并和分配需求的bit数量做比较,对于大内存分配或者多次内存分配,算法执行效率非常差,该过程不仅耗时,而且分配效率低。
并且,当查找到存在所需的bit数量时,即进行分配,由于内存分配和释放的不断重复,容易导致内存块之间出现碎片问题,造成空间浪费的情况。
鉴于此,根据本发明实施例,提供了一种基于Bitmap的内存分配方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种基于Bitmap的内存分配方法,可用于服务器、终端设备等,图1是根据本发明实施例的基于Bitmap的内存分配方法的流程图,如图1所示,该流程包括如下步骤:
步骤S101,将内存空间均分为多个内存块。
AI芯片设备端通常集成有高速片上内存,可以将高速片上内存均分为多个内存块。例如,高速片上总内存空间为256B,若将每个内存块划分为64B,则可以分为4块内存块。
步骤S102,根据内存块的空间大小,建立Bitmap数据结构,并初始化Bitmap数据结构,Bitmap数据结构为由二进制位组成的结构,Bitmap数据结构中的每个二进制位表征内存块的分配状态。
如上所述,AI芯片上存在一块高速片上内存空间,该内存空间中会开辟一块空间用于分配给用户,并保留一块空间用于算法运行即存储bitmap数据结构。使用bitmap数据结构来记录内存的分配状态,并在内存分配、释放的时候读取并改变bitmap的值,完成内存管理的任务。待分配内存空间和bitmap数据结构所在空间是两块互相独立的区域,这样在算法运行时不会导致数据冲突或紊乱。
在确定内存块的空间大小后,用bitmap数据结构把所有的可分配空间表示出来,可以参照图2所示,若每块内存块的空间大小为64B,则bitmap数据结构中的每个二进制位,对应一个内存块,也即是每个bit的大小为64B。不同的硬件平台可以根据硬件上可分配内存的空间大小自行设置bitmap数据结构大小为固定值,以提高算法性能。
在高速片上内存为初始状态,即没有任何读写的情况下,初始化Bitmap数据结构,将Bitmap数据结构中的所有bit位均置为0。其中,当二进制状态为0时,表征内存块处于未被分配状态;当二进制状态为1时,表征内存块处于已被分配状态。假设有8个大小为64B的内存块,且均未被分配,则用0b00000000来表示。
步骤S103,确定待分配数据所需的分配空间和起始地址。
对于待分配数据,首先要确定所需的分配空间大小,其次,还需要确定待分配数据的起始地址。例如:存在多个内存块时,可以选择从哪里进行分配。
步骤S104,根据分配空间,确定所需的bit数量。对于一次内存分配需求,用户给定需求分配空间,算法计算该次需求需要多少个bit可以表示。
步骤S105,基于起始地址,统计Bitmap数据结构的头部,是否存在满足所需的bit数量的连续的二进制位为0的位数。
在统计连续0数量时,一些技术中需要逐bit从头遍历所有bitmap数据结构,看是否存在一段连续的0bit满足需求,则说明是否有一段连续的空间可以满足内存分配需求。如果存在这段空间,则把标识该段空间所有bit设置为1,返回这段空间的起始地址;如果当前连续的0bit数量小于需求的bit数量,则继续向后遍历,直到遍历完所有的bitmap。而内存分配时需要逐bit遍历bitmap数据结构,每次遍历都需要统计0bit的数量,并和分配需求的bit数量做比较,对于大内存分配或者多次内存分配,算法执行效率非常低。
本实施例中,可以使用移位运算和硬件的机器指令进行组合,提高统计效率。例如,统计0b00011100代表的内存块中是否存在3个连续的bit为0的可分配内存空间时,之前的算法需要循环3次,而当前算法使用硬件的机器指令“数头零“仅需要一次循环即可统计出来。
在一次运算中,运行一次“数头零”指令,即可计算出头部总空间。如果该块空间不满足需求大小,可以使用移位指令,将不可用空间移走,直到暴露出可用空间。这个过程会重复,直到所有的内存块都被统计过,不会存在内存块被遗漏的问题,从而避免产生内存碎片。
步骤S106,在Bitmap数据结构的头部,满足所需的bit数量的情况下,向待分配数据分配所需的分配空间。
本实施例中,采用移位运算和硬件的机器指令进行组合,利用“数头零”的方法,即可读取头部的所有零的数量,而无需逐个遍历bit,不仅提高了分配效率,而且不容易导致内存块之间出现碎片问题,造成空间浪费的情况。尤其在大内存分配和多次内存分配情况下,本实施例中提供的分配方法,较传统算法有大幅度的性能提升,同时并未产生内存碎片问题。
在一些可选的实施方式中,分配状态包括已分配状态与未分配状态;
Bitmap数据结构中的二进制位表征处于已分配状态时,二进制位为1、Bitmap数据结构中的二进制位表征处于未分配状态时,二进制位为0。
假设有8个大小为64B的内存块,且均未被分配,则用0b00000000来表示。其中,已被分配的映射到bit为1,否则为0。
假设第一、三、五、七个bit被分配了,则标识该块内存的值转变为0b10101010。再将第一、五个bit释放,则标识该块内存的值转变为0b00100010。
在一些可选的实施方式中,在Bitmap数据结构的头部不存在满足所需的bit数量的连续的二进制位为0的位数的情况下,采用移位运算,将同一二进制位的位进行偏移,直至Bitmap数据结构的头部存在满足所需的bit数量的连续的二进制位为0的位数。
其中,同一二进制位表示的是连续的同样为0或连续的同样为1的二进制位。本实施例中,为了避免内存碎片问题,算法会把bitmap数据结构中的元素往一个方向偏移,直到一个内存块的bitmap数据结构被统计完,才会去遍历下一个bitmap数据结构,保证不会出现有遗漏的内存碎片满足需求却未被分配的现象。例如:检查0b00100011表示的内存空间中是否存在3个连续的bit为0的可分配空间,当检查到第一个连续bit为0不满足需求时,会将两个bit为0的位,和1个bit为1的位进行移位,左移为如下值:0b00011000,此时中间的内存会暴漏出来,算法会把该块内存分配给用户,并将其值置为1。
本实施例中,可以采用移位、数零的方法统计所需的bit数量,无需逐个遍历以及增加循环次数,提高了分配效率,且避免了碎片问题。
在一些可选的实施方式中,如图3所示,上述步骤S105包括,即统计Bitmap数据结构的头部,是否存在满足所需的bit数量的连续的二进制位为0的位数,包括:
步骤S501,获取Bitmap数据结构的头部的第一个二进制位地址及预先设置的“数头零”指令;
步骤S502,从地址开始,执行“数头零”指令,依次扫描二进制位;
步骤S503,在扫描到第一个非零位的情况下,确定连续的二进制位为0的位数。
本实施例中,使用移位运算和硬件的机器指令进行组合的方式,可以使用“数头零”机器指令来确定Bitmap数据结构的头部的连续的二进制位为0的位数。算法中的数值操作均使用位运算或硬件指令完成,避免了传统的数学运算,对于算法的整体性能大有益处,且提高了统计效率。
本实施例中,使用到的操作,可以使用硬件指令替换实现。如果对于其中的关键操作如数零操作,可以使用位运算进行封装实现。
在一些可选的实施方式中,如图4所示,在上述步骤S503之后包括,即在扫描到第一个非零位的情况下,确定连续的二进制位为0的位数之后,包括:
步骤S504,对Bitmap数据结构进行取反运算;
步骤S505,对取反后的Bitmap数据结构,进行移位运算;
步骤S506,对移位后的Bitmap数据结构,再次进行取反运算;
步骤S507,对再次进行取反运算后的Bitmap数据结构,执行“数头零”指令。
例如,统计0b11111100代表的内存空间中是否存在连续的2bit的可分配内存空间时,之前的算法需要循环8次才可以统计出来,当前算法仅使用一次取反运算(0b00000011)、一次数头零运算(6)、一次移位运算(0b11000000)、一次取反运算(0b00111111)、一次数头零运算(2)即可得到结果。在面对大内存分配或多次内存分配时,整体性能将是指数级提升。
本实施例中,用到的取反、移位、数零指令均有硬件支持,可以避免传统的数学运算,对于算法的整体性能大有益处,且分配效率高。
在一些可选的实施方式中,建立的Bitmap数据结构为两个;
其中一个Bitmap数据结构用于表征起始地址,另一个Bitmap数据结构用于表征内存块的所有二进制位。
在初始化bitmap数据结构时,本实施例中,可以生成两个bitmap数据结构。其中一个bitmap数据结构表示一次内存分配的起始bit,可以记为beginmap,另一个bitmap数据结构表示一次内存分配的所有bit,可以记为usemap。
在一些技术中,通常会用两个bit表示一个内存空间,用来做算法实现。例如:0b00表示未被分配的内存空间、0b11表示已被分配的内存空间、0b01表示一次内存分配需求的起始内存空间。这样做浪费了一次bitmap表示,并且不利于算法优化,例如无法使用某些硬件的数头0,数尾0指令来加速。
本实施例中,采用两个bitmap数据结构,同样大小的bitmap可以表示更大的内存块,例如8bit在上述算法中只能表示4个内存块,在本实施例中的算法中可以表示8个内存块,有利于算法优化。在判断是否有可用连续内存空间时,仅使用usemap即可,减少了一半的bit遍历数量,在连续多次内存分配的时候会大大提高效率。对于内存空间的释放,beginmap仅在内存释放的时候使用。
在传统的基于bitmap的内存分配算法上,本实施例中最大程度地利用了bitmap可表示的范围,同时利用了位运算和硬件指令的优势,避免了引入内存碎片问题。
在一些可选的实施方式中,方法还包括:
获取待释放空间的起始地址;
基于起始地址,确定待释放空间的大小;
对待释放空间进行释放。
在一些技术中,对于一次内存释放需求,用户需要提供待释放的空间起始地址和待释放的空间大小。算法计算空间起始地址对应的bitmap位置,将该位置和之后待分配空间大小的bit置为0。而内存释放时需要用户给定待释放内存空间的起始地址和大小,这种接口设计出来不符合当下主流软件的设计理念,对于用户不友好。对于用户友好的释放接口仅提供内存空间起始地址即可,由软件自行判断出要释放的空间大小。
本实施例中,可以将内存分配的接口设计如下:
;
其中,size为内存分配需求空间大小,单位为Byte;direct为枚举类型,表示内存分配方向,即是从低地址向高地址分配(Address Low To High)还是从高地址向低地址分配(Address High To Low)。以上介绍均基于从低地址向高地址的内存分配。如果有满足需求的内存空间,返回可用空间的起始地址。否则返回零地址。
可以将内存释放的接口设计如下:
;
其中,addr为待释放的内存空间起始地址。需要说明的是,上述接口设计没有提供其他参数,即待释放内存空间大小由算法自行推断。
关于基于起始地址,确定待释放空间的大小,以下进行举例说明,具体地:
给定一个待释放空间的起始地址,用起始地址除以对齐大小(比如64B),再除以每个bitmap的大小(比如64B),就可以得到在总内存空间的哪个bitmap上。用起始地址除以对齐大小,再对每个bitmap中的bit的大小取余,就可以得到起始地址在bitmap自低向高的偏移,这样就找到了起始地址对应起始块的位置;
假设bitmap0表示一块待释放内存的起始块;bitmap1表示一块待释放内存的所有块。其中,bitmap0为:100010000100000;bitmap1为:111111111111111。
根据找到的起始块向后偏移,偏移过程中检查bitmap0是否一直为0,若bitmap0为0并且bitmap1为1,则继续偏移,直至找到bitmap1上第一个不为1的块,就找到了结束块的位置;
则起始块与结束块之间的空间,为起始地址所在的内存块的待释放分配空间的大小。
以上操作均可以使用位运算操作完成。
本实施例中,只需获取待释放空间的起始地址即可,通过算法自行确定释放空间的起始地址所在的内存块的待释放空间的大小,并对待释放空间进行释放。这样大大提高了用户的便捷性。
在本实施例中还提供了一种基于Bitmap的内存分配装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种基于Bitmap的内存分配装置,如图5所示,包括:
划分模块201,用于将内存空间均分为多个内存块;
建立模块202,用于根据所述内存块的空间大小,建立Bitmap数据结构,并初始化所述Bitmap数据结构,Bitmap数据结构为由二进制位组成的结构,Bitmap数据结构中的每个二进制位表征内存块的分配状态;分配状态包括已分配状态与未分配状态;Bitmap数据结构中的二进制位表征处于已分配状态时,二进制位为1、Bitmap数据结构中的二进制位表征处于未分配状态时,二进制位为0;
第一确定模块203,用于确定待分配数据所需的分配空间和起始地址;
第二确定模块204,用于根据分配空间,确定所需的bit数量;
统计模块205,用于基于起始地址,统计Bitmap数据结构的头部,是否存在满足所需的bit数量的连续的二进制位为0的位数;
分配模块206,用于在Bitmap数据结构的头部,满足所需的bit数量的情况下,向待分配数据分配所需的分配空间;在Bitmap数据结构的头部不存在满足所需的bit数量的连续的二进制位为0的位数的情况下,采用移位运算,将同一二进制位的位进行偏移,直至Bitmap数据结构的头部存在满足所需的bit数量的连续的二进制位为0的位数。
本实施例中的基于Bitmap的内存分配装置是以功能单元的形式来呈现,这里的单元是指ASIC电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
本发明实施例还提供一种计算机设备,具有上述图5所示的基于Bitmap的内存分配装置。
请参阅图6,图6是本发明可选实施例提供的一种计算机设备的结构示意图,如图6所示,该计算机设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在计算机设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个计算机设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图6中以一个处理器10为例。
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
其中,所述存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。
存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据一种小程序落地页的展现的计算机设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
该计算机设备还包括通信接口30,用于该计算机设备与其他设备或通信网络通信。
本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的方法。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (7)
1.一种基于Bitmap的内存分配方法,其特征在于,所述方法包括:
将内存空间均分为多个内存块;
根据所述内存块的空间大小,建立Bitmap数据结构,并初始化所述Bitmap数据结构,所述Bitmap数据结构为由二进制位组成的结构,所述Bitmap数据结构中的每个所述二进制位表征所述内存块的分配状态;所述分配状态包括已分配状态与未分配状态;所述Bitmap数据结构中的所述二进制位表征处于所述已分配状态时,所述二进制位为1、所述Bitmap数据结构中的所述二进制位表征处于所述未分配状态时,所述二进制位为0;
确定待分配数据所需的分配空间和起始地址;
根据所述分配空间,确定所需的bit数量;
基于所述起始地址,统计所述Bitmap数据结构的头部,是否存在满足所述所需的bit数量的连续的二进制位为0的位数;
在所述Bitmap数据结构的头部,满足所述所需的bit数量的情况下,向所述待分配数据分配所需的分配空间;
在所述Bitmap数据结构的头部不存在满足所述所需的bit数量的连续的二进制位为0的位数的情况下,采用移位运算,将同一二进制位的位进行偏移,直至所述Bitmap数据结构的头部存在满足所述所需的bit数量的连续的二进制位为0的位数;
所述统计所述Bitmap数据结构的头部,是否存在满足所述所需的bit数量的连续的二进制位为0的位数,包括:
获取所述Bitmap数据结构的头部的第一个二进制位地址及预先设置的“数头零”指令;
从所述地址开始,执行所述“数头零”指令,依次扫描二进制位;
在扫描到第一个非零位的情况下,确定连续的二进制位为0的位数。
2.根据权利要求1所述的方法,其特征在于,在所述在扫描到第一个非零位的情况下,确定连续的二进制位为0的位数之后,包括:
对所述Bitmap数据结构进行取反运算;
对取反后的所述Bitmap数据结构,进行移位运算;
对移位后的所述Bitmap数据结构,再次进行所述取反运算;
对再次进行所述取反运算后的所述Bitmap数据结构,执行所述“数头零”指令。
3.根据权利要求1所述的方法,其特征在于,建立的所述Bitmap数据结构为两个;
其中一个所述Bitmap数据结构用于表征所述起始地址,另一个所述Bitmap数据结构用于表征所述内存块的所有二进制位。
4.根据权利要求1所述的方法,其特征在于,还包括:
获取待释放空间的起始地址;
基于所述起始地址,确定所述待释放空间的大小;
待释放空间的大小;
对所述待释放空间进行释放。
5.一种基于Bitmap的内存分配装置,用于执行权利要求1-4任一项所述的基于Bitmap的内存分配方法,其特征在于,所述装置包括:
划分模块,用于将内存空间均分为多个内存块;
建立模块,用于根据所述内存块的空间大小,建立Bitmap数据结构,并初始化所述Bitmap数据结构,所述Bitmap数据结构为由二进制位组成的结构,所述Bitmap数据结构中的每个所述二进制位表征所述内存块的分配状态;所述分配状态包括已分配状态与未分配状态;所述Bitmap数据结构中的所述二进制位表征处于所述已分配状态时,所述二进制位为1、所述Bitmap数据结构中的所述二进制位表征处于所述未分配状态时,所述二进制位为0;
第一确定模块,用于确定待分配数据所需的分配空间和起始地址;
第二确定模块,用于根据所述分配空间,确定所需的bit数量;
统计模块,用于基于所述起始地址,统计所述Bitmap数据结构的头部,是否存在满足所述所需的bit数量的连续的二进制位的位数;
分配模块,用于在所述Bitmap数据结构的头部,满足所述所需的bit数量的情况下,向所述待分配数据分配所需的分配空间;在所述Bitmap数据结构的头部不存在满足所述所需的bit数量的连续的二进制位为0的位数的情况下,采用移位运算,将同一二进制位的位进行偏移,直至所述Bitmap数据结构的头部存在满足所述所需的bit数量的连续的二进制位为0的位数;
所述统计所述Bitmap数据结构的头部,是否存在满足所述所需的bit数量的连续的二进制位为0的位数,包括:
获取所述Bitmap数据结构的头部的第一个二进制位地址及预先设置的“数头零”指令;
从所述地址开始,执行所述“数头零”指令,依次扫描二进制位;
在扫描到第一个非零位的情况下,确定连续的二进制位为0的位数。
6.一种计算机设备,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1-4任一项所述的基于Bitmap的内存分配方法。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行权利要求1-4任一项所述的基于Bitmap的内存分配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311256978.XA CN116991595B (zh) | 2023-09-27 | 2023-09-27 | 一种基于Bitmap的内存分配方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311256978.XA CN116991595B (zh) | 2023-09-27 | 2023-09-27 | 一种基于Bitmap的内存分配方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116991595A CN116991595A (zh) | 2023-11-03 |
CN116991595B true CN116991595B (zh) | 2024-02-23 |
Family
ID=88525217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311256978.XA Active CN116991595B (zh) | 2023-09-27 | 2023-09-27 | 一种基于Bitmap的内存分配方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116991595B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN113590332A (zh) * | 2021-08-05 | 2021-11-02 | 上海金仕达软件科技有限公司 | 内存管理方法、装置及内存分配器 |
CN114115738A (zh) * | 2021-11-23 | 2022-03-01 | 烽火通信科技股份有限公司 | 一种基于分布式存储的磁盘空间管理方法及系统 |
CN115599544A (zh) * | 2022-10-12 | 2023-01-13 | 阿里巴巴(中国)有限公司(Cn) | 内存管理方法、装置、计算机设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144402A1 (en) * | 2003-12-29 | 2005-06-30 | Beverly Harlan T. | Method, system, and program for managing virtual memory |
-
2023
- 2023-09-27 CN CN202311256978.XA patent/CN116991595B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN113590332A (zh) * | 2021-08-05 | 2021-11-02 | 上海金仕达软件科技有限公司 | 内存管理方法、装置及内存分配器 |
CN114115738A (zh) * | 2021-11-23 | 2022-03-01 | 烽火通信科技股份有限公司 | 一种基于分布式存储的磁盘空间管理方法及系统 |
CN115599544A (zh) * | 2022-10-12 | 2023-01-13 | 阿里巴巴(中国)有限公司(Cn) | 内存管理方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116991595A (zh) | 2023-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9489409B2 (en) | Rollover strategies in a N-bit dictionary compressed column store | |
KR102594657B1 (ko) | 비순차적 리소스 할당을 구현하는 방법 및 장치 | |
CN110389905B (zh) | 资源释放方法、资源分配方法、设备和计算机程序产品 | |
CN112214313B (zh) | 内存分配方法及相关设备 | |
CN108845877B (zh) | 管理内存的方法、装置和系统 | |
CN107209716B (zh) | 内存管理装置和方法 | |
CN111723057B (zh) | 一种文件预读方法、装置、设备及存储介质 | |
US20190332540A1 (en) | Storage management method, electronic device and computer readable medium | |
CN106685429B (zh) | 整数压缩方法及装置 | |
CN112269665B (zh) | 内存的处理方法和装置、电子设备和存储介质 | |
CN117311621A (zh) | 一种缓存盘空间分配方法、装置、计算机设备及存储介质 | |
WO2021227789A1 (zh) | 存储空间的分配方法、装置、终端及计算机可读存储介质 | |
CN116991595B (zh) | 一种基于Bitmap的内存分配方法、装置、设备及介质 | |
CN117271136A (zh) | 数据处理方法、装置、设备和存储介质 | |
US9189382B2 (en) | Noncontiguous representation of an array | |
CN115658561A (zh) | 配电终端内存管理方法、装置、电子设备及存储介质 | |
CN109271538A (zh) | 一种图片存储方法及相关设备 | |
US11640321B2 (en) | Method and apparatus for memory allocation in a multi-core processor system, and recording medium therefor | |
CN110046040B (zh) | 分布式任务处理方法及系统和存储介质 | |
US10331369B2 (en) | Array control program, array control method, and array control apparatus | |
CN115374024A (zh) | 一种内存数据排序方法及相关设备 | |
CN112348733B (zh) | Gpu片外存储器中存储对象的初始化填充及读写方法和装置 | |
CN112068948B (zh) | 数据散列方法、可读存储介质和电子设备 | |
CN111679909A (zh) | 数据处理方法、装置及终端设备 | |
CN106021121B (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 |