掌桥专利:专业的专利平台
掌桥专利
首页

内存资源分配方法、装置、设备及存储介质

文献发布时间:2024-04-18 19:52:40


内存资源分配方法、装置、设备及存储介质

技术领域

本发明涉及计算机技术领域,尤其涉及一种内存资源分配方法、装置、设备及存储介质。

背景技术

在一个系统中有多个应用要申请内部存储空间使用,有些特定系统中,应用申请的地址空间是有重叠的,这时候只能进入堆栈进行排队,等待前面的应用释放内存,才能申请到这段地址空间。

目前,现有技术都是通过双向链表进行排序,每个新进来的申请要与链表内所有的节点进行比较,这样当链表中积压的节点非常多的时候,比较过程时间会很长。

亟需一种内存资源分配方法,解决当链表中积压的节点非常多的时候,比较过程时间过长的问题,实现高效的内存资源分配。

发明内容

本发明的主要目的在于提供了一种内存资源分配方法、装置、设备及存储介质,旨在解决现有技术当链表中积压的节点非常多的时候,比较过程时间过长的技术问题。

为实现上述目的,本发明提供了一种内存资源分配方法,所述方法包括以下步骤:

获取新节点向预设的三向链表申请的目标内存基地址及范围,所述三向链表预先通过内存分配排队算法建立,所述三向链表包括横向链表和竖向链表,所述横向链表为双向链表,所述竖向链表为由内存地址存在重合的节点组成的单向链表;

根据所述三向链表和所述目标内存基地址及范围对所述新节点进行内存资源分配。

可选地,所述根据所述三向链表和所述目标内存基地址及范围对所述新节点进行内存资源分配的步骤,包括:

基于所述横向链表,获取所述横向链表的尾节点;

将所述横向链表的尾节点作为初始目标节点,按照由后向前的顺序依次判断所述横向链表的全部目标节点的数据与所述目标内存基地址及范围是否产生内存地址重合;

若否,则将所述尾节点的有效值更新为1,以及将所述新节点的有效值更新为0,并将所述新节点作为所述横向链表的新的尾节点,以实现内存资源分配。

可选地,所述将所述横向链表的尾节点作为初始目标节点,按照由后向前的顺序依次判断所述横向链表的全部目标节点的数据与所述目标内存基地址及范围是否产生内存地址重合的步骤之后,还包括:

若是,则判断所述目标节点的分支有效值是否为1;

若所述目标节点的分支有效值为1,则以所述目标节点作为竖向链表的初始节点,并依次获取连接在所述初始节点下的后续分支节点的标记值;

在所述后续分支节点中存在所述标记值为0的目标后续分支节点时,将所述目标后续分支节点作为尾分支节点并将所述新节点连接在所述尾分支节点之后,以生成新的尾分支节点;

基于所述新的尾分支节点,将所述尾分支节点的标记值更新为1,并将所述新的尾分支节点的标记值更新为0。

可选地,所述若是,则判断所述目标节点的分支有效值是否为1的步骤之后,还包括:

若所述目标节点的分支有效值不为1,则判定所述目标节点上无连接的分支节点,并将所述新节点作为分支节点;

将所述目标节点的分支有效值更新为1,并将所述目标节点作为竖向链表的初始节点,以及将所述分支节点的标记值更新为0。

可选地,所述根据所述三向链表和所述目标内存基地址及范围对所述新节点进行内存资源分配的步骤,还包括:

基于所述三向链表,在所述目标节点申请内存地址释放时,将所述目标节点申请的所述内存地址释放,并以所述目标节点为初始节点由后向前依次获取对比节点的数据;

判断所述目标节点是否为竖向链表的初始节点;

若是,则获取所述目标节点的分支节点的数据;

依次判断所述分支节点的数据与所述对比节点数据是否产生内存地址重合;

若未产生内存地址重合,则将所述目标节点释放的内存地址分配至所述分支节点。

可选地,所述依次判断所述分支节点的数据与所述对比节点数据是否产生内存地址重合的步骤之后,还包括:

若产生内存地址重合,则判定内存地址未申请成功,并将所述分支节点作为以对比节点作为初始节点的竖向链表的尾节点。

可选地,所述若产生内存地址重合,则判定内存地址未申请成功,并将所述分支节点作为以对比节点作为初始节点的竖向链表的尾节点的步骤,具体包括:

若产生内存地址重合,则判定内存地址未申请成功,依次获取所述竖向链表中节点的分支有效值;

若所述分支有效值为0,则将所述分支节点与所述节点连接,并将所述节点的分支有效值更新为1,将所述分支节点的分支有效值更新为0。

此外,为实现上述目的,本发明还提出一种内存资源分配装置,所述装置包括:

获取模块,用于获取新节点向预设的三向链表申请的目标内存基地址及范围,所述预设的三向链表预先通过内存分配排队算法建立,所述三向链表包括横向链表和竖向链表,所述横向链表为双向链表,所述竖向链表为由内存地址存在重合的节点组成的单向链表;

分配模块,用于根据所述三向链表和所述目标内存基地址及范围对所述新节点进行内存资源分配。

此外,为实现上述目的,本发明还提出一种内存资源分配设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的内存资源分配程序,所述内存资源分配程序配置为实现如上文所述的内存资源分配方法的步骤。

此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有内存资源分配程序,所述内存资源分配程序被处理器执行时实现如上文所述的内存资源分配方法的步骤。

本发明通过获取新节点向预设的三向链表申请的目标内存基地址及范围,其中,预设的三向链表预先通过内存分配排队算法建立,三向链表包括横向链表和竖向链表,横向链表为双向链表,竖向链表为由内存地址存在重合的节点组成的单向链表;根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配。由于本发明是通过内存分配排队算法建立预设的三向链表,然后获取新节点向预设的三向链表申请的目标内存基地址及范围,再根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配,相比于现有技术,本发明有效解决了当链表中积压的节点非常多的时候,比较过程时间过长的问题,进而实现了高效的内存资源分配。

附图说明

图1是本发明实施例方案涉及的硬件运行环境的内存资源分配设备的结构示意图;

图2为本发明内存资源分配方法第一实施例的流程示意图;

图3为本发明内存资源分配方法第二实施例的流程示意图;

图4为本发明内存资源分配方法第三实施例的流程示意图;

图5为本发明内存资源分配方法中三向链表结构示意图;

图6为本发明内存资源分配装置第一实施例的结构框图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

参照图1,图1为本发明实施例方案涉及的硬件运行环境的内存资源分配设备结构示意图。

如图1所示,该内存资源分配设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(Wireless-Fidelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM),也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的结构并不构成对内存资源分配设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及内存资源分配程序。

在图1所示的内存资源分配设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明内存资源分配设备中的处理器1001、存储器1005可以设置在内存资源分配设备中,所述内存资源分配设备通过处理器1001调用存储器1005中存储的内存资源分配程序,并执行本发明实施例提供的内存资源分配方法。

本发明实施例提供了一种内存资源分配方法,参照图2,图2为本发明内存资源分配方法第一实施例的流程示意图。

本实施例中,所述内存资源分配方法包括以下步骤:

步骤S10:获取新节点向预设的三向链表申请的目标内存基地址及范围,所述三向链表预先通过内存分配排队算法建立,所述三向链表包括横向链表和竖向链表,所述横向链表为双向链表,所述竖向链表为由内存地址存在重合的节点组成的单向链表;

需要说明的是,本实施例的执行主体可以是一种具有CPU内核处理以及程序运行功能的计算服务设备,例如平板电脑、个人电脑等,或者是一种能够实现相同或相似功能的电子设备,例如上述图1所示的内存资源分配设备等。以下以内存资源分配设备为例,对本实施例及下述各实施例进行举例说明。

需要解释的是,双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个节点开始,都可以很方便地访问它的前驱节点和后继节点。

单向链表也叫单链表,是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为节点列表,因为链表是由一个个节点组装起来的;其中每个节点都有指针成员变量指向链表中的下一个节点。

进一步地,一般程序要找到内存所存储的数据或者下一个指令,都要通过段地址+偏移地址的形式来确定所需要的东西所在内存的位置,以便读取。而基地址其实就是每个段的起始地址,又称段地址。

需要说明的是,预设的三向链表是通过内存分配排队算法,根据当前设备应用程序的内存使用情况建立的。上述三向链表包括横向链表和竖向链表。

可理解的是,内存分配排队算法是将新节点进来后,按从后向前的顺序,与横向链表中的节点进行比较,判断是否有地址重合,如果比较整个横向链表,都没有地址重合,则此新节点成功申请到地址范围,并进入横向链表,新进来的节点为横向链表的最后一个节点;若在比较过程中存在地址重合,则地址申请失败,进入有地址重合节点的竖向链表中。

例如,参考图5,图5为本发明内存资源分配方法中三向链表结构示意图,横向链表是一个双向链表,竖向链表是一个单链表,其中,N0、N1、N2、N3、N4、N5、N6、N7、N8表示上述三向链表的节点。横向链表存储是的地址申请成功的节点,竖向链表存储的是有地址重合的节点。

步骤S20:根据所述三向链表和所述目标内存基地址及范围对所述新节点进行内存资源分配。

在具体实现中,通过内存分配排队算法,根据三向链表和新节点申请的目标内存基地址及范围对新节点进行内存分配,按从后向前的顺序,与三向链表中的横向链表的节点进行比较,判断是否有地址重合,如果比较整个横向链表,都没有地址重合,则此新节点成功申请到地址范围,并进入横向链表,新进来的节点为横向链表的最后一个节点;若在比较过程中存在地址重合,则地址申请失败,进入有地址重合节点的竖向链表中;当横向链表中的节点释放地址空间时,根据内存分配排队算法更新三向链表。

本实施例通过获取新节点向预设的三向链表申请的目标内存基地址及范围,其中,预设的三向链表预先通过内存分配排队算法建立,三向链表包括横向链表和竖向链表,横向链表为双向链表,竖向链表为由内存地址存在重合的节点组成的单向链表;根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配。由于本发明是通过内存分配排队算法建立预设的三向链表,然后获取新节点向预设的三向链表申请的目标内存基地址及范围,再根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配,相比于现有技术,本发明有效解决了当链表中积压的节点非常多的时候,比较过程时间过长的问题,进而实现了高效的内存资源分配。

参考图3,图3为本发明内存资源分配方法第二实施例的流程示意图。

基于上述第一实施例,在本实施例中,所述步骤S20,包括:

步骤S201:基于所述横向链表,获取所述横向链表的尾节点;

可理解的是,尾节点是指横向链表中最后一个节点,即存储最后一个元素的节点,与之对应的是头节点。

步骤S202:将所述横向链表的尾节点作为初始目标节点,按照由后向前的顺序依次判断所述横向链表的全部目标节点的数据与所述目标内存基地址及范围是否产生内存地址重合;

在具体实现中,步骤S202之后,还包括:

步骤S2021:若是,则判断所述目标节点的分支有效值是否为1;

需要说明的是,若上述目标节点的分支有效值为1,表示此目标节点是竖向链表的初始节点。

例如,参考图5,图5为本发明内存资源分配方法中三向链表结构示意图,图中,节点N2和节点N3的分支有效值为1。N2和N6组成一个竖向链表,N3、N7和N8组成一个竖向链表。

在具体实现中,步骤S2021之后,还包括:

步骤S2022':若所述目标节点的分支有效值不为1,则判定所述目标节点上无连接的分支节点,并将所述新节点作为分支节点;

步骤S2023':将所述目标节点的分支有效值更新为1,并将所述目标节点作为竖向链表的初始节点,以及将所述分支节点的标记值更新为0。

需要说明的是,竖向链表中除初始节点外,竖向链表的其他节点都有标记值,若节点的标记值为0表示此节点为竖向链表的尾节点,若标记值为1表示此节点不是竖向链表的尾节点,即后面还有节点连接。

步骤S2022:若所述目标节点的分支有效值为1,则以所述目标节点作为竖向链表的初始节点,并依次获取连接在所述初始节点下的后续分支节点的标记值;

步骤S2023:在所述后续分支节点中存在所述标记值为0的目标后续分支节点时,将所述目标后续分支节点作为尾分支节点并将所述新节点连接在所述尾分支节点之后,以生成新的尾分支节点;

步骤S2024:基于所述新的尾分支节点,将所述尾分支节点的标记值更新为1,并将所述新的尾分支节点的标记值更新为0。

步骤S203:若否,则将所述尾节点的有效值更新为1,以及将所述新节点的有效值更新为0,并将所述新节点作为所述横向链表的新的尾节点,以实现内存资源分配。

需要说明的若横向链表中节点的有效值为1,则表示此节点不是横向链表的尾节点;若节点的有效值为0,则表示此节点是横向链表的尾节点。例如,参考图5,图中N0、N1、N2、N3、N4这5个节点的有效值为1,N5的有效值为0。

在具体实现中,若所述横向链表的全部目标节点的数据与所述目标内存基地址及范围没有内存地址重合,则新节点成功申请到目标内存基地址及范围,并将横向链表的尾节点的有效值更新为1,将新节点的有效值更新为0,新节点进入横向链表,成为横向链表的新的尾节点。

本实施例通过获取新节点向预设的三向链表申请的目标内存基地址及范围,其中,预设的三向链表预先通过内存分配排队算法建立,三向链表包括横向链表和竖向链表,横向链表为双向链表,竖向链表为由内存地址存在重合的节点组成的单向链表;基于所述横向链表,获取所述横向链表的尾节点;将所述横向链表的尾节点作为初始目标节点,按照由后向前的顺序依次判断所述横向链表的全部目标节点的数据与所述目标内存基地址及范围是否产生内存地址重合;若否,则将所述尾节点的有效值更新为1,以及将所述新节点的有效值更新为0,并将所述新节点作为所述横向链表的尾节点,以实现内存资源分配;若是,则判断所述目标节点的分支有效值是否为1;若所述目标节点的分支有效值为1,则以所述目标节点作为竖向链表的初始节点,并依次获取连接在所述初始节点下的后续分支节点的标记值;在所述后续分支节点中存在所述标记值为0的目标后续分支节点时,将所述目标后续分支节点作为尾分支节点并将所述新节点连接在所述尾分支节点之后,以生成新的尾分支节点;基于所述新的尾分支节点,将所述尾分支节点的标记值更新为1,并将所述新的尾分支节点的标记值更新为0。由于本发明是通过内存分配排队算法建立预设的三向链表,然后获取新节点向预设的三向链表申请的目标内存基地址及范围,再根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配,相比于现有技术,本发明有效解决了当链表中积压的节点非常多的时候,比较过程时间过长的问题,进而实现了高效的内存资源分配。

参考图4,图4为本发明内存资源分配方法第三实施例的流程示意图。

基于上述各实施例,在本实施例中,所述步骤S20,还包括:

步骤S201':基于所述三向链表,在所述目标节点申请内存地址释放时,将所述目标节点申请的所述内存地址释放,并以所述目标节点为初始节点由后向前依次获取对比节点的数据;

步骤S202':判断所述目标节点的分支有效值是否为1;

步骤S203':若是,则获取所述目标节点的分支节点的数据;

步骤S204':依次判断所述分支节点的数据与所述对比节点数据是否产生内存地址重合;

步骤S205':若未产生内存地址重合,则将所述目标节点释放的内存地址分配至所述分支节点。

需要解释的是,若产生内存地址重合,则判定内存地址未申请成功,依次获取所述竖向链表中节点的分支有效值;若所述分支有效值为0,则将所述分支节点与所述节点连接,并将所述节点的分支有效值更新为1,将所述分支节点的分支有效值更新为0。

在具体实现中,例如参考图5,若N2释放内存地址空间时,N2的分支有效值和标记值都变为0,N1的后继节点指向N3,N3的前驱节点指向N1。并且N2挂的竖坐标N4此时依次与N1和N0进行比较。如果没有地址重合,则返回信息,表示节点N2的地址空间的申请者成功申请到地址范围使用权,机节点N4成功申请到内存地址空间。如果有地址重合接着挂在与之有重合的节点下面,直到此节点内存空间释放,再与横向链表前面的节点比较,直到节点N4成功申请到内存地址空间。

例如,参考图5,若N3释放内存地址空间时,检测到N3下面挂的第一个节点是N5,则N5进行上述释放过程。检测到N5的标记值为1,表明节点N5不是竖向链表的尾结点,N5下面还有N6,则N6接着进行上述释放过程,知道节点N6成功申请到内存地址空间。

本实施例通过获取新节点向预设的三向链表申请的目标内存基地址及范围,其中,预设的三向链表预先通过内存分配排队算法建立,三向链表包括横向链表和竖向链表,横向链表为双向链表,竖向链表为由内存地址存在重合的节点组成的单向链表;基于所述三向链表,在所述目标节点申请内存地址释放时,将所述目标节点申请的所述内存地址释放,并以所述目标节点为初始节点由后向前依次获取对比节点的数据;判断所述目标节点的分支有效值是否为1;若是,则获取所述目标节点的分支节点的数据;依次判断所述分支节点的数据与所述对比节点数据是否产生内存地址重合;若未产生内存地址重合,则将所述目标节点释放的内存地址分配至所述分支节点。由于本发明是通过内存分配排队算法建立预设的三向链表,然后获取新节点向预设的三向链表申请的目标内存基地址及范围,再根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配,相比于现有技术,本发明有效解决了当链表中积压的节点非常多的时候,比较过程时间过长的问题,进而实现了高效的内存资源分配管理。

此外,本发明实施例还提出一种存储介质,所述存储介质上存储有内存资源分配程序,所述内存资源分配程序被处理器执行时实现如上文所述的内存资源分配方法的步骤。

参照图6,图6为本发明内存资源分配装置第一实施例的结构框图。

如图6所示,本发明实施例提出的内存资源分配装置包括:获取模块501和分配模块502。

所述获取模块501,用于获取新节点向预设的三向链表申请的目标内存基地址及范围,所述三向链表预先通过内存分配排队算法建立,所述三向链表包括横向链表和竖向链表,所述横向链表为双向链表,所述竖向链表为由内存地址存在重合的节点组成的单向链表;

所述分配模块502,用于根据所述三向链表和所述目标内存基地址及范围对所述新节点进行内存资源分配。

本实施例通过获取新节点向预设的三向链表申请的目标内存基地址及范围,其中,预设的三向链表预先通过内存分配排队算法建立,三向链表包括横向链表和竖向链表,横向链表为双向链表,竖向链表为由内存地址存在重合的节点组成的单向链表;根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配。由于本发明是通过内存分配排队算法建立预设的三向链表,然后获取新节点向预设的三向链表申请的目标内存基地址及范围,再根据三向链表和目标内存基地址及范围对所述新节点进行内存资源分配,相比于现有技术,本发明有效解决了当链表中积压的节点非常多的时候,比较过程时间过长的问题,进而实现了高效的内存资源分配。

基于本发明上述内存资源分配装置第一实施例,提出本发明内存资源分配装置的第二实施例。

在本实施例中,所述分配模块502,还用于基于所述横向链表,获取所述横向链表的尾节点;将所述横向链表的尾节点作为初始目标节点,按照由后向前的顺序依次判断所述横向链表的全部目标节点的数据与所述目标内存基地址及范围是否产生内存地址重合;若否,则将所述尾节点的有效值更新为1,以及将所述新节点的有效值更新为0,并将所述新节点作为所述横向链表的尾节点,以实现内存资源分配。

所述分配模块502,还用于若是,则判断所述目标节点的分支有效值是否为1;若所述目标节点的分支有效值为1,则以所述目标节点作为竖向链表的初始节点,并依次获取连接在所述初始节点下的后续分支节点的标记值;在所述后续分支节点中存在所述标记值为0的目标后续分支节点时,将所述目标后续分支节点作为尾分支节点并将所述新节点连接在所述尾分支节点之后,以生成新的尾分支节点;基于所述新的尾分支节点,将所述尾分支节点的标记值更新为1,并将所述新的尾分支节点的标记值更新为0。

所述分配模块502,还用于若所述目标节点的分支有效值不为1,则判定所述目标节点上无连接的分支节点,并将所述新节点作为分支节点;将所述目标节点的分支有效值更新为1,并将所述目标节点作为竖向链表的初始节点,以及将所述分支节点的标记值更新为0。

本发明内存资源分配装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 资源分配方法、装置、计算机设备及计算机可读存储介质
  • 计算资源分配方法、装置、电子设备、存储介质
  • 资源分配方法及装置、用户设备、基站、可读存储介质
  • 服务资源分配方法、装置、计算机设备和存储介质
  • 一种设备内存状态的监测方法、装置及存储介质
  • 内存资源分配方法、装置、设备及机器可读存储介质
  • 内存资源分配方法、装置、电子设备及可读存储介质
技术分类

06120116332988