CN114328285A - 一种嵌入式操作系统的堆内存分配管理方法和装置 - Google Patents

一种嵌入式操作系统的堆内存分配管理方法和装置 Download PDF

Info

Publication number
CN114328285A
CN114328285A CN202210005786.0A CN202210005786A CN114328285A CN 114328285 A CN114328285 A CN 114328285A CN 202210005786 A CN202210005786 A CN 202210005786A CN 114328285 A CN114328285 A CN 114328285A
Authority
CN
China
Prior art keywords
memory
memory block
idle
current
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.)
Pending
Application number
CN202210005786.0A
Other languages
English (en)
Inventor
马忠刚
李萌
王晓伟
窦维维
杨万春
赵亚城
杨晶
况德军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Nuclear Power Joint Venture Co Ltd
China Techenergy Co Ltd
Original Assignee
Guangdong Nuclear Power Joint Venture Co Ltd
China Techenergy Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangdong Nuclear Power Joint Venture Co Ltd, China Techenergy Co Ltd filed Critical Guangdong Nuclear Power Joint Venture Co Ltd
Priority to CN202210005786.0A priority Critical patent/CN114328285A/zh
Publication of CN114328285A publication Critical patent/CN114328285A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Memory System (AREA)

Abstract

本申请公开了一种嵌入式操作系统的堆内存分配管理方法和装置,具体为根据收到的内存请求查找空闲链表,对从空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;当被分配的当前内存块使用结束时,通过将当前内存块与其他空闲内存块合并的方式进行内存回收。通过将回收的当前内存块与其他空闲内存块的合并,可以在有内存块被释放时不产生新的空闲内存块,从而避免大量的内存碎片对空闲堆内存空间的占用,提高了堆内存的利用率。

Description

一种嵌入式操作系统的堆内存分配管理方法和装置
技术领域
本申请涉及核电仪控系统技术领域,更具体地说,涉及一种嵌入式操作系统的堆内存分配管理方法和装置。
背景技术
嵌入式操作系统(embedded operating system,EOS)的内存管理中的堆内存管理主要是进行堆内存的分配和回收,相对于用户进程内存分配方式来说,堆内存管理具有分配响应时间短、使用周期短、处理效率高、系统开销小和适用于少量多次内存请求的特点。
当前嵌入式操作系统的堆内存在不断的分配和释放过程中,会产生很多的内存碎片,所谓内存碎片是指不连续的内存空间,如图1所示,大量的内存碎片会占用大量空闲堆内存空间,造成资源浪费,导致内存利用率低。
发明内容
有鉴于此,本申请提供一种嵌入式操作系统的堆内存分配管理方法和装置,用于提高堆内存的利用率。
为了实现上述目的,现提出的方案如下:
一种嵌入式操作系统的堆内存分配管理方法,所述堆内存分配管理方法包括步骤:
根据收到的内存请求查找空闲链表,对从所述空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;
当被分配的当前内存块使用结束时,通过将所述当前内存块与其他空闲内存块合并的方式进行内存回收。
可选的,所述通过将所述当前内存块与其他空闲内存块合并的方式进行内存回收,包括步骤:
当仅在所述当前内存块之前相邻位置存在一个空闲内存块时,通过前相邻合并方式进行内存回收;
当仅在所述当前内存块之后相邻位置存在一个空闲内存块时,通过后相邻合并方式进行内存回收;
当在所述当前内存块之前和之后相邻位置各存在一个空闲内存块时,通过前后相邻合并方式进行内存回收;
当在所述当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收。
可选的,所述当仅在所述当前内存块之前相邻位置存在一个空闲内存块时,通过前相邻合并方式进行内存回收,包括步骤:
根据所述当前内存块的内存块大小对所述空闲内存块的表项进行修改。
可选的,所述当仅在所述当前内存块之后相邻位置存在一个空闲内存块时,通过后相邻合并方式进行内存回收,包括步骤:
在所述空闲链表中为所述当前内存块新建一个表项,所述表项的内存大小包括当前内存块的大小与所述空闲内存块的大小之和;
将所述空闲内存块的表项从所述空闲链表中移除。
可选的,所述当在所述当前内存块之前和之后相邻位置各存在一个空闲内存块时,通过前后相邻合并方式进行内存回收,包括步骤:
在所述空闲链表中所述当前内存块之前的空闲内存块的第一表项进行修改,所述第一表项的内存大小为当前内存块的大小、所述当前内存块之前空闲内存块的大小和所述当前内存块之后的空闲内存块的大小之和;
将所述当前内存块之后的空闲内存块的表项从所述空闲链表中移除。
可选的,所述当在所述当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收,包括步骤:
在所述空闲链表中为所述当前内存块新建一个表项。
一种嵌入式操作系统的堆内存分配管理装置,所述堆内存分配管理装置包括:
内存分配模块,用于根据收到的内存请求查找空闲链表,对从所述空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;
内存回收模块,用于当被分配的当前内存块使用结束时,通过将所述当前内存块与其他空闲内存块合并的方式进行内存回收。
可选的,所述内存回收模块包括:
第一回收单元,用于当仅在所述当前内存块之前相邻位置存在一个空闲内存块时,通过前相邻合并方式进行内存回收;
第二回收单元,用于当仅在所述当前内存块之后相邻位置存在一个空闲内存块时,通过后相邻合并方式进行内存回收;
第三回收单元,用于当在所述当前内存块之前和之后相邻位置各存在一个空闲内存块时,通过前后相邻合并方式进行内存回收;
第四回收单元,用于当在所述当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收。
可选的,所述第一回收单元被配置为根据所述当前内存块的内存块大小对所述空闲内存块的表项进行修改。
可选的,所述第二回收单元被配置为在所述空闲链表中为所述当前内存块新建一个表项,所述表项的内存大小包括当前内存块的大小与所述空闲内存块的大小之和,并将所述空闲内存块的表项从所述空闲链表中移除。
可选的,所述第三回收单元被配置为在所述空闲链表中所述当前内存块之前的空闲内存块的第一表项进行修改,所述第一表项的内存大小为当前内存块的大小、所述当前内存块之前空闲内存块的大小和所述当前内存块之后的空闲内存块的大小之和,并将所述当前内存块之后的空闲内存块的表项从所述空闲链表中移除。
可选的,所述第四回收单元被配置为在所述空闲链表中为所述当前内存块新建一个表项。
从上述的技术方案可以看出,本申请公开了一种嵌入式操作系统的堆内存分配管理方法和装置,具体为根据收到的内存请求查找空闲链表,对从空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;当被分配的当前内存块使用结束时,通过将当前内存块与其他空闲内存块合并的方式进行内存回收。通过将回收的当前内存块与其他空闲内存块的合并,可以在有内存块被释放时不产生新的空闲内存块,从而避免大量的内存碎片对空闲堆内存空间的占用,提高了堆内存的利用率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为嵌入式操作系统的堆内存的内存空间的示意图
图2为本申请实施例的一种嵌入式操作系统的堆内存分配管理方法的流程图;
图3为本申请实施例的堆内存的分配方法的流程图;
图4为本申请实施例的前相邻合并的示意图;
图5为本申请实施例的后相邻合并的示意图;
图6为本申请实施例的前后相邻合并的示意图;
图7为本申请实施例的一种嵌入式操作系统的堆内存分配管理方法的流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
核电仪控实时操作系统是一种可以应用在核电安全级领域的分区实时操作系统,包含操作系统内核、文件系统、网络协议栈。其中操作系统的内核中任务对象、信号量对象、消息队列对象等都需要在内核中申请堆内存空间,这些对象都是可以动态创建和删除。内核管理数据结构中分别存在任务对象、信号量对象、定时器对象、消息队列对象的对象资源空闲链表。内核中针对每一类可动态创建的对象,在删除这些对象时,都使用单独的资源空闲链表来管理这些删除的对象资源。基于以上实际情况,本申请特以核电仪控实时操作系统为例,对嵌入式操作系统的堆内存分配管理方法进行说明。
嵌入式操作系统会通过动态分块、空闲链表的方式对堆内存进行管理。动态分块是指系统不预先划分固定的内存块,而是在内存请求时,根据申请的大小划分出满足需求的内存块,内存块的数量是可变的。在堆内存初始化时,堆内存的空间作为一个完整的大空闲块。当有内存请求时,从该空闲块中划分出一块与申请大小相同的区域进行分配。随着一系列的内存分配和回收,原来一整块大的空闲块形成了若干占用块和空闲内存块相间的布局。为此特提出如下实施例。
实施例一
图2为本申请实施例的一种嵌入式操作系统的堆内存分配管理方法的流程图。
如图2所示,本实施例提供的堆内存分配管理方法应用于前述核电厂仪表控制系统等嵌入式操作系统中,用于对该嵌入式操作系统被分配的对内存进行分配和回收,该堆内存分配管理方法包括如下步骤:
S1、基于内存请求进行堆内存的分配。
即当有系统内核因为内存存储或缓存的需要发出内存请求时,根据收到的内存请求从空闲链表中查找相应的空闲块,该内存请求会携带有所请求的内存长度,当从空闲链表中查找到的其长度满足上述内存长度的空闲块后,基于该空闲块进行内存分配。
如图3所示,如果内存请求所申请内存大小为user_size,从空闲链表中查找到的内存块的大小为idle_size,如果idle_size–user_size<min_size,其中min_size为约定的最小堆内存块大小,此种情况说明剩余部分的内存块过小,不能再分割,因此将空闲链表中这块空闲内存分配给该内存请求;
如果idle_size–user_size>min_size,则从该空闲内存块中划分出与内存请求的大小相等的内存空间,剩余部分作为一个独立的空闲内存块在空闲链表建立一个新表项。
S2、当被分配的当前内存块结束时进行内存回收。
当前述被分配的内存块或其他近程所分配的内存块使用结束被释放时,回收上述被释放的内存块,为了便于区别,本申请将被释放的内存块称为当前内存卡,以区别与其他空闲内存块或占用内存块。本申请是通过将当前内存块与其他空闲内存块进行合并的方式进行内存回收。具体方案如下:
当仅在当前内存块之前相邻位置存在一个空闲内存块时,如图4所示,此时通过前相邻合并方式进行内存回收,具体过程如下:
即将这两个相邻的当前内存块与空闲内存块合并成一个更大的空闲内存块,此时不需要为回收的当前内存块新建表项,只需修改堆内存块结构体前一个内存块的大小,如下:ul_forward_size=ul_forward_size+新增加内存块大小,后一个内存块pt_next指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”;具体内部如下:
Figure BDA0003455450130000061
Figure BDA0003455450130000071
当仅在当前内存块之后相邻位置存在一个空闲内存块时,如图5所示,此时通过后相邻合并方式进行内存回收,具体过程如下:
为回收的当前内存块新建一个表项,将新表项作为合并内存块的表项,大小为两个内存块之和,将后一个空闲内存块的表项从空闲链表中移出,将合并内存块的表项加入空闲链表,修改堆内存块结构体后一个内存块的大小,如下:ul_backward_size=ul_backward_size+新增加内存块大小,前一个内存块pt_previous指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”。
当在当前内存块之前和之后相邻位置各存在一个空闲内存块时,如图6所示,此时通过前后相邻合并方式进行内存回收,具体过程如下:
将后一个相邻的空闲内存块的表项从空闲链表中移出,需要回收内存块和后一个空闲内存块大小的累加值为x,修改堆内存块结构体前一个内存块的大小,如下:ul_forward_size=ul_forward_size+x,前一个内存块pt_next指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”。
当在当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收,具体过程如下:
为回收的当前内存块新建表项,并将回收的当前内存块的表项添加到在空闲链表中,即新增t_heap_block结构体,ul_backward_size等于新增加内存块大小,后一个内存块pt_next指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”。
从上述技术方案可以看出,本实施例提供了一种嵌入式操作系统的堆内存分配管理方法,具体为根据收到的内存请求查找空闲链表,对从空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;当被分配的当前内存块使用结束时,通过将当前内存块与其他空闲内存块合并的方式进行内存回收。通过将回收的当前内存块与其他空闲内存块的合并,可以在有内存块被释放时不产生新的空闲内存块,从而避免大量的内存碎片对空闲堆内存空间的占用,提高了堆内存的利用率。
实施例二
图7为本申请实施例的一种嵌入式操作系统的堆内存分配管理装置的框图。
如图7所示,本实施例提供的堆内存分配管理装置应用于前述核电厂仪表控制系统等嵌入式操作系统中,用于对该嵌入式操作系统被分配的对内存进行分配和回收,该堆内存分配管理装置具体包括内存分配模块10和内存回收模块20。
内存分配模块用于基于内存请求进行堆内存的分配。
即当有系统内核因为内存存储或缓存的需要发出内存请求时,根据收到的内存请求从空闲链表中查找相应的空闲块,该内存请求会携带有所请求的内存长度,当从空闲链表中查找到的其长度满足上述内存长度的空闲块后,基于该空闲块进行内存分配。
如图3所示,如果内存请求所申请内存大小为user_size,从空闲链表中查找到的内存块的大小为idle_size,如果idle_size–user_size<min_size,其中min_size为约定的最小堆内存块大小,此种情况说明剩余部分的内存块过小,不能再分割,因此将空闲链表中这块空闲内存分配给该内存请求;
如果idle_size–user_size>min_size,则从该空闲内存块中划分出与内存请求的大小相等的内存空间,剩余部分作为一个独立的空闲内存块在空闲链表建立一个新表项。
内存回收模块用于当被分配的当前内存块结束时进行内存回收。
当前述被分配的内存块或其他近程所分配的内存块使用结束被释放时,回收上述被释放的内存块,为了便于区别,本申请将被释放的内存块称为当前内存卡,以区别与其他空闲内存块或占用内存块。本申请是通过将当前内存块与其他空闲内存块进行合并的方式进行内存回收。该模块包括第一分配单元、第二分配单元、第三分配单元和第四分配单元。
第一分配单元用于当仅在当前内存块之前相邻位置存在一个空闲内存块时,如图4所示,此时通过前相邻合并方式进行内存回收,具体过程如下:
即将这两个相邻的当前内存块与空闲内存块合并成一个更大的空闲内存块,此时不需要为回收的当前内存块新建表项,只需修改堆内存块结构体前一个内存块的大小,如下:ul_forward_size=ul_forward_size+新增加内存块大小,后一个内存块pt_next指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”;具体内部如下:
Figure BDA0003455450130000091
Figure BDA0003455450130000101
第二分配单元用于当仅在当前内存块之后相邻位置存在一个空闲内存块时,如图5所示,此时通过后相邻合并方式进行内存回收,具体过程如下:
为回收的当前内存块新建一个表项,将新表项作为合并内存块的表项,大小为两个内存块之和,将后一个空闲内存块的表项从空闲链表中移出,将合并内存块的表项加入空闲链表,修改堆内存块结构体后一个内存块的大小,如下:ul_backward_size=ul_backward_size+新增加内存块大小,前一个内存块pt_previous指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”。
第三分配单元用于当在当前内存块之前和之后相邻位置各存在一个空闲内存块时,如图6所示,此时通过前后相邻合并方式进行内存回收,具体过程如下:
将后一个相邻的空闲内存块的表项从空闲链表中移出,需要回收内存块和后一个空闲内存块大小的累加值为x,修改堆内存块结构体前一个内存块的大小,如下:ul_forward_size=ul_forward_size+x,前一个内存块pt_next指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”。
第四分配单元用于当当在当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收,具体过程如下:
为回收的当前内存块新建表项,并将回收的当前内存块的表项添加到在空闲链表中,即新增t_heap_block结构体,ul_backward_size等于新增加内存块大小,后一个内存块pt_next指针指向新增空闲块结构体指针。堆管理结构体“正在使用的堆空间大小(ui_in_use_size)”减去当前空闲内存块大小,“处于空闲的内存块数(ui_free_blocks)加1”。
从上述技术方案可以看出,本实施例提供了一种嵌入式操作系统的堆内存分配管理装置,具体为根据收到的内存请求查找空闲链表,对从空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;当被分配的当前内存块使用结束时,通过将当前内存块与其他空闲内存块合并的方式进行内存回收。通过将回收的当前内存块与其他空闲内存块的合并,可以在有内存块被释放时不产生新的空闲内存块,从而避免大量的内存碎片对空闲堆内存空间的占用,提高了堆内存的利用率。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的技术方案进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种嵌入式操作系统的堆内存分配管理方法,其特征在于,所述堆内存分配管理方法包括步骤:
根据收到的内存请求查找空闲链表,对从所述空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;
当被分配的当前内存块使用结束时,通过将所述当前内存块与其他空闲内存块合并的方式进行内存回收。
2.如权利要求1所述的堆内存分配管理方法,其特征在于,所述通过将所述当前内存块与其他空闲内存块合并的方式进行内存回收,包括步骤:
当仅在所述当前内存块之前相邻位置存在一个空闲内存块时,通过前相邻合并方式进行内存回收;
当仅在所述当前内存块之后相邻位置存在一个空闲内存块时,通过后相邻合并方式进行内存回收;
当在所述当前内存块之前和之后相邻位置各存在一个空闲内存块时,通过前后相邻合并方式进行内存回收;
当在所述当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收。
3.如权利要求2所述的堆内存分配管理方法,其特征在于,所述当仅在所述当前内存块之前相邻位置存在一个空闲内存块时,通过前相邻合并方式进行内存回收,包括步骤:
根据所述当前内存块的内存块大小对所述空闲内存块的表项进行修改。
4.如权利要求2所述的堆内存分配管理方法,其特征在于,所述当仅在所述当前内存块之后相邻位置存在一个空闲内存块时,通过后相邻合并方式进行内存回收,包括步骤:
在所述空闲链表中为所述当前内存块新建一个表项,所述表项的内存大小包括当前内存块的大小与所述空闲内存块的大小之和;
将所述空闲内存块的表项从所述空闲链表中移除。
5.如权利要求2所述的堆内存分配管理方法,其特征在于,所述当在所述当前内存块之前和之后相邻位置各存在一个空闲内存块时,通过前后相邻合并方式进行内存回收,包括步骤:
在所述空闲链表中所述当前内存块之前的空闲内存块的第一表项进行修改,所述第一表项的内存大小为当前内存块的大小、所述当前内存块之前空闲内存块的大小和所述当前内存块之后的空闲内存块的大小之和;
将所述当前内存块之后的空闲内存块的表项从所述空闲链表中移除。
6.如权利要求2所述的堆内存分配管理方法,其特征在于,所述当在所述当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收,包括步骤:
在所述空闲链表中为所述当前内存块新建一个表项。
7.一种嵌入式操作系统的堆内存分配管理装置,其特征在于,所述堆内存分配管理装置包括:
内存分配模块,用于根据收到的内存请求查找空闲链表,对从所述空闲链表中找到的第一个满足申请长度的空闲块进行分割并分配;
内存回收模块,用于当被分配的当前内存块使用结束时,通过将所述当前内存块与其他空闲内存块合并的方式进行内存回收。
8.如权利要求7所述的堆内存分配管理装置,其特征在于,所述内存回收模块包括:
第一回收单元,用于当仅在所述当前内存块之前相邻位置存在一个空闲内存块时,通过前相邻合并方式进行内存回收;
第二回收单元,用于当仅在所述当前内存块之后相邻位置存在一个空闲内存块时,通过后相邻合并方式进行内存回收;
第三回收单元,用于当在所述当前内存块之前和之后相邻位置各存在一个空闲内存块时,通过前后相邻合并方式进行内存回收;
第四回收单元,用于当在所述当前内存块之前和之后相邻位置均无空闲内存块时,通过无相邻合并方式进行内存回收。
9.如权利要求8所述的堆内存分配管理装置,其特征在于,所述第一回收单元被配置为根据所述当前内存块的内存块大小对所述空闲内存块的表项进行修改。
10.如权利要求8所述的堆内存分配管理装置,其特征在于,所述第二回收单元被配置为在所述空闲链表中为所述当前内存块新建一个表项,所述表项的内存大小包括当前内存块的大小与所述空闲内存块的大小之和,并将所述空闲内存块的表项从所述空闲链表中移除。
11.如权利要求8所述的堆内存分配管理装置,其特征在于,所述第三回收单元被配置为在所述空闲链表中所述当前内存块之前的空闲内存块的第一表项进行修改,所述第一表项的内存大小为当前内存块的大小、所述当前内存块之前空闲内存块的大小和所述当前内存块之后的空闲内存块的大小之和,并将所述当前内存块之后的空闲内存块的表项从所述空闲链表中移除。
12.如权利要求8所述的堆内存分配管理方法,其特征在于,所述第四回收单元被配置为在所述空闲链表中为所述当前内存块新建一个表项。
CN202210005786.0A 2022-01-04 2022-01-04 一种嵌入式操作系统的堆内存分配管理方法和装置 Pending CN114328285A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210005786.0A CN114328285A (zh) 2022-01-04 2022-01-04 一种嵌入式操作系统的堆内存分配管理方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210005786.0A CN114328285A (zh) 2022-01-04 2022-01-04 一种嵌入式操作系统的堆内存分配管理方法和装置

Publications (1)

Publication Number Publication Date
CN114328285A true CN114328285A (zh) 2022-04-12

Family

ID=81024282

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210005786.0A Pending CN114328285A (zh) 2022-01-04 2022-01-04 一种嵌入式操作系统的堆内存分配管理方法和装置

Country Status (1)

Country Link
CN (1) CN114328285A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117435352A (zh) * 2023-12-20 2024-01-23 北京遥感设备研究所 一种定长变长数据混合管理的轻量化内存优化分配方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117435352A (zh) * 2023-12-20 2024-01-23 北京遥感设备研究所 一种定长变长数据混合管理的轻量化内存优化分配方法
CN117435352B (zh) * 2023-12-20 2024-03-29 北京遥感设备研究所 一种定长变长数据混合管理的轻量化内存优化分配方法

Similar Documents

Publication Publication Date Title
EP3073374B1 (en) Thread creation method, service request processing method and related device
CN111818112A (zh) 一种基于Kafka系统的发送消息的方法和装置
CN107533435B (zh) 存储空间的分配方法及存储设备
CN107169009B (zh) 一种分布式存储系统的数据分裂方法及装置
JPH05189281A (ja) 記憶装置のファイル割当て方式
CN108829523A (zh) 内存资源分配方法、装置、电子设备及可读存储介质
CN112150023A (zh) 任务分配方法、装置及存储介质
CN111367671A (zh) 一种内存分配方法、装置、设备及可读存储介质
CN103455433A (zh) 内存管理方法及系统
CN112685333A (zh) 一种堆内存管理方法及装置
CN109992392B (zh) 一种资源部署方法、装置及资源服务器
CN114328285A (zh) 一种嵌入式操作系统的堆内存分配管理方法和装置
CN103970612A (zh) 一种基于虚拟机预分割的负载均衡方法和装置
CN113254223B (zh) 一种系统重启后的资源分配方法、系统及相关组件
CN114422509A (zh) 文件自动备份方法、装置、网盘及存储介质
CN105205409A (zh) 一种防止内存复用中数据泄露的方法及计算机系统
CN116860441A (zh) 基于Bitmap的小额堆外内存管理方法、系统、终端设备及存储介质
CN115168243A (zh) 一种内存空间管理方法、装置、电子设备及存储介质
CN108279982B (zh) pbs资源与hadoop资源管理方法、系统及设备
CN115708078A (zh) 一种数据存储方法及装置、存储介质
CN113778688A (zh) 内存管理系统、内存管理方法、内存管理装置
CN112433855A (zh) 一种资源分配方法、装置、服务器
CN110750330A (zh) 一种虚拟机创建方法、系统、电子设备及存储介质
CN111881123B (zh) 分布式系统之间的数据同步方法及系统
JP2989608B2 (ja) セルプール管理装置

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