CN110008140A - 内存管理方法、装置、计算机设备和存储介质 - Google Patents
内存管理方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN110008140A CN110008140A CN201910179847.3A CN201910179847A CN110008140A CN 110008140 A CN110008140 A CN 110008140A CN 201910179847 A CN201910179847 A CN 201910179847A CN 110008140 A CN110008140 A CN 110008140A
- Authority
- CN
- China
- Prior art keywords
- physical memory
- address
- addresses
- memory
- pond
- 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.)
- Granted
Links
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请涉及一种内存管理方法、装置、计算机设备和存储介质。方法包括:获取物理内存池的使用率,当物理内存池的使用率大于使用阈值时,获取地址映射表,地址映射表用于记录物理内存池中被使用的物理内存的物理内存地址,当地址映射表中的各个物理内存地址不连续时,分别获取各个物理内存地址对应的目标物理内存地址,各个目标物理内存地址是连续的,根据各个目标物理内存地址更新地址映射表,并根据各个目标物理内存地址更新物理内存池。当各个物理内存地址不连续时,计算机设备获取各个物理内存地址对应的各个目标物理内存地址,由于各个目标物理内存地址是连续的,因此,可以使得被使用的物理内存地址连续,提高空闲内存的集中度。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种内存管理方法、装置、计算机设备和存储介质。
背景技术
内存是计算机设备中重要的部件之一,内存可以是暂时存储程序以及数据的地方。计算机设备在申请内存或者释放内存的时候,可以直接使用物理地址。物理地址是在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址。在频繁的申请内存或者释放内存之后,传统的内存管理方法往往会使计算机设备中产生间断的空闲内存。
然而,传统的内存管理方法在管理内存时,存在空闲内存比较分散的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种内存管理方法、装置、计算机设备和存储介质,可以提高空闲内存的集中度。
一种内存管理方法,所述方法包括:
获取物理内存池的使用率;
当所述物理内存池的使用率大于使用阈值时,获取地址映射表,其中,所述地址映射表用于记录所述物理内存池中被使用的物理内存的物理内存地址;
当所述地址映射表中的各个物理内存地址不连续时,分别获取各个所述物理内存地址对应的目标物理内存地址,其中,各个所述目标物理内存地址是连续的;
根据各个所述目标物理内存地址更新所述地址映射表,并根据各个所述目标物理内存地址更新所述物理内存池。
在其中一个实施例中,所述根据各个所述目标物理内存地址更新所述物理内存池,包括:
分别获取所述地址映射表中的各个所述物理内存地址,并获取各个所述物理内存地址中的数据;
获取与各个所述物理内存地址对应的存储介质,并将各个所述物理内存地址中的数据拷贝到与各个所述物理内存地址对应的存储介质中;
分别将各个所述存储介质中的各个所述物理内存地址中的数据,拷贝到各个所述目标物理内存地址中。
在其中一个实施例中,所述根据各个所述目标物理内存地址更新所述地址映射表,包括:
将所述地址映射表中的各个所述物理内存地址,更新为与各个所述物理内存地址所对应的各个所述目标物理内存地址。
在其中一个实施例中,所述分别获取各个所述物理内存地址对应的目标物理内存地址,包括:
获取各个所述物理内存地址在所述物理内存池中的排列顺序;
根据所述排列顺序,获取所述物理内存池中排在上一位的物理内存地址;
根据所述上一位的物理内存地址,得到所述物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址;
将所述排在下一位的物理内存地址所对应的目标物理内存地址,作为所述上一位的物理内存地址,并返回执行根据所述上一位的物理内存地址,得到所述物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址的步骤,直到获取到所述物理内存池中的各个所述物理内存地址所对应的各个目标物理内存地址为止。
在其中一个实施例中,还包括:获取应用程序发送的内存地址申请请求;
根据所述内存地址申请请求,在所述物理内存池中分配运行物理内存地址;
从虚拟内存池中获取运行虚拟内存地址,并将所述运行虚拟内存地址返回给所述应用程序;
在所述地址映射表中建立所述运行虚拟内存地址与所述运行物理内存地址之间的对应关系。
在其中一个实施例中,所述从虚拟内存池中获取运行虚拟内存地址,包括:
获取所述地址映射表中,与所述被使用的物理内存的物理内存地址对应的虚拟内存地址;
在所述虚拟内存池中,对与所述被使用的物理内存的物理内存地址对应的虚拟内存地址进行标记;
随机将所述虚拟内存池中未被标记的一个虚拟内存地址作为所述运行虚拟内存地址。
在其中一个实施例中,所述申请请求中包含有请求的内存地址长度;
所述根据所述内存地址申请请求,在所述物理内存池中分配运行物理内存地址,包括:
提取所述申请请求中的所述内存地址长度,并获取所述物理内存池中的空闲内存地址以及所述空闲内存地址长度;
当所述空闲内存地址长度大于或等于所述请求的内存地址长度时,在所述空闲内存地址中,分配与所述请求的内存地址长度相等长度的运行物理内存地址。
在其中一个实施例中,还包括:
获取内存地址释放请求,所述地址释放请求中包含有要释放的虚拟内存地址;
在所述地址映射表中查找所述要释放的虚拟内存地址,并根据所述地址映射表获取与所述要释放的虚拟内存地址对应的物理内存地址;
根据与所述要释放的虚拟内存地址对应的物理内存地址,释放所述物理内存池中的物理内存地址,并删除所述地址映射表中所述要释放的虚拟内存地址以及与所述要释放的虚拟内存地址对应的物理内存地址。
在其中一个实施例中,所述根据与所述要释放的虚拟内存地址对应的物理内存地址,释放所述物理内存池中的物理内存地址,包括:
将保留在与所述要释放的虚拟内存地址对应的物理内存地址中的数据,从与所述要释放的虚拟内存地址对应的物理内存地址中释放出来,得到释放后的空闲的物理内存地址;
所述方法还包括:
获取所述物理内存池中的空闲物理内存地址;
将所述释放后的空闲物理内存地址,按照预设顺序插入到所述物理内存池中的空闲物理内存地址中。
一种内存管理装置,所述装置包括:
使用率获取模块,用于获取物理内存池的使用率;
地址映射表获取模块,用于当所述物理内存池的使用率大于使用阈值时,获取地址映射表,其中,所述地址映射表用于记录所述物理内存池中被使用的物理内存的物理内存地址;
目标物理内存地址获取模块,用于当所述地址映射表中的各个物理内存地址不连续时,分别获取各个所述物理内存地址对应的目标物理内存地址,其中,各个所述目标物理内存地址是连续的;
更新模块,用于根据各个所述目标物理内存地址,更新所述地址映射表以及所述物理内存池。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取物理内存池的使用率;
当所述物理内存池的使用率大于使用阈值时,获取地址映射表,其中,所述地址映射表用于记录所述物理内存池中被使用的物理内存的物理内存地址;
当所述地址映射表中的各个物理内存地址不连续时,分别获取各个所述物理内存地址对应的目标物理内存地址,其中,各个所述目标物理内存地址是连续的;
根据各个所述目标物理内存地址更新所述地址映射表,并根据各个所述目标物理内存地址更新所述物理内存池。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取物理内存池的使用率;
当所述物理内存池的使用率大于使用阈值时,获取地址映射表,其中,所述地址映射表用于记录所述物理内存池中被使用的物理内存的物理内存地址;
当所述地址映射表中的各个物理内存地址不连续时,分别获取各个所述物理内存地址对应的目标物理内存地址,其中,各个所述目标物理内存地址是连续的;
根据各个所述目标物理内存地址更新所述地址映射表,并根据各个所述目标物理内存地址更新所述物理内存池。
上述内存管理方法、装置、计算机设备和存储介质,通过获取物理内存池的使用率,当物理内存池的使用率大于使用阈值时,获取地址映射表,其中,地址映射表用于记录物理内存池中被使用的物理内存的物理内存地址,当地址映射表中的各个物理内存地址不连续时,分别获取各个物理内存地址对应的目标物理内存地址,其中,各个目标物理内存地址是连续的,根据各个目标物理内存地址,更新地址映射表,并更新物理内存池。当地址映射表中的各个物理内存地址不连续时,计算机设备可以分别获取各个物理内存地址对应的目标物理内存地址,由于各个目标物理内存地址是连续的,因此,计算机设备可以更加便捷的使得被使用的物理内存地址连续,提高空闲内存的集中度。
附图说明
图1为一个实施例中内存管理方法的应用环境图;
图2为一个实施例中内存管理方法的流程示意图;
图3为一个实施例中地址映射表的示意图;
图4为一个实施例中拷贝数据的示意图;
图5为一个实施例中获取各个目标物理内存地址的流程示意图;
图6为一个实施例中内存管理装置的结构框图;
图7为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的内存管理方法,可以应用于如图1所示的应用环境中。如图1所示,应用环境可以包括计算机设备110。计算机设备110可以获取物理内存池的使用率,当物理内存池的使用率大于使用阈值时,计算机设备110可以获取地址映射表,其中,地址映射表可以用于记录物理内存池中被使用的物理内存的物理内存地址。当地址映射表中的各个物理内存地址不连续时,计算机设备110可以分别获取各个物理内存地址对应的目标物理内存地址,其中,各个目标物理内存地址是连续的。计算机设备110可以根据各个目标物理内存地址,更新地址映射表以及物理内存池。其中,计算机设备110可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑。
在一个实施例中,如图2所示,提供了一种内存管理方法,包括以下步骤:
步骤202,获取物理内存池的使用率。
物理内存池可以用于表示计算机设备中的一整块物理内存地址,包含有被使用的物理内存地址以及空闲的物理内存地址。物理内存池的使用率可以用于表示物理内存池中,被使用的物理内存地址占总的物理内存地址的比率。其中,物理内存池的使用率可以是具体的数值,例如,物理内存池的使用率可以是20%、39%、50%等具体的数值。
计算机设备可以对内存管理指令进行检测。其中,内存管理指令可以是用户通过计算机设备进行操作产生的,内存管理指令可以用于指示计算机设备管理内存。当计算机设备检测到内存管理指令时,计算机设备可以获取物理内存池的使用率。
步骤204,当物理内存池的使用率大于使用阈值时,获取地址映射表,其中,地址映射表用于记录物理内存池中被使用的物理内存的物理内存地址。
使用阈值可以是一个具体的数值,例如,使用阈值可以是50%、79%、92%等具体的数据。地址映射表可以用于记录物理内存池中被使用的物理内存的物理内存地址,地址映射表中还可以记录有被使用的物理内存的物理内存地址所对应的长度,还可以记录有被使用的物理内存的物理内存地址所对应的虚拟内存地址。
如图3所示,地址映射表310中包含有表项312、被使用的物理内存地址314、被使用的物理内存地址对应的长度316、被使用的虚拟内存地址318。根据地址映射表310可以得到被使用的物理内存地址314与被使用的虚拟内存地址318之间的对应关系。
计算机设备在获取到物理内存池的使用率后,可以将获取到的物理内存池的使用率与使用阈值进行比较,并得到比较结果。当计算机设备得到的比较结果是物理内存池的使用率大于使用阈值时,计算机设备可以获取地址映射表。
步骤206,当地址映射表中的各个物理内存地址不连续时,分别获取各个物理内存地址对应的目标物理内存地址,其中,各个目标物理内存地址是连续的。
各个目标物理内存地址可以是连续的。例如,地址映射表中的各个物理内存地址分别是0x08001004-0x08001204、0x08002004-0x08002044以及0x08003004-0x08003244,计算机设备可以获取到0x08001004-0x08001204对应的目标物理内存地址为0x00000001-0x00000201,0x08002004-0x08002044对应的目标物理内存地址为0x00000202-0x00000242,0x08003004-0x08003244对应的目标物理内存地址为0x00000243-0x00000483。由此可见,根据各个物理内存地址获取到的各个目标物理内存地址0x00000001-0x00000201、0x00000202-0x00000242以及0x00000243-0x00000483是连续的。
计算机设备可以获取地址映射表中的各个物理内存地址,并判断获取到的各个物理内存地址是否是连续的,从而得到判断结果。当计算机设备得到的判断结果是地址映射表中的各个物理内存地址不连续时,计算机设备可以分别获取各个物理内存地址对应的目标物理内存地址,以使各个物理内存地址连续。
步骤208,根据各个目标物理内存地址更新地址映射表,并根据各个目标物理内存地址更新物理内存池。
计算机设备在获取到各个目标物理内存地址后,可以按照各个目标物理内存地址,对地址映射表以及物理内存池进行更新。
在本实施例中,计算机设备通过获取物理内存池的使用率,当物理内存池的使用率大于使用阈值时,获取地址映射表,其中,地址映射表用于记录物理内存池中被使用的物理内存的物理内存地址,当地址映射表中的各个物理内存地址不连续时,分别获取各个物理内存地址对应的目标物理内存地址,其中,各个目标物理内存地址是连续的,根据各个目标物理内存地址,更新地址映射表,并更新物理内存池。当地址映射表中的各个物理内存地址不连续时,计算机设备可以分别获取各个物理内存地址对应的目标物理内存地址,由于各个目标物理内存地址是连续的,因此,计算机设备可以更加便捷的使得被使用的物理内存地址连续,从而提高空闲内存的集中度。
在一个实施例中,提供的一种内存管理方法还可以包括根据各个目标物理内存地址更新物理内存池的过程,具体包括:分别获取地址映射表中的各个物理内存地址,并获取各个物理内存地址中的数据;获取与各个物理内存地址对应的存储介质,并将各个物理内存地址中的数据拷贝到与各个物理内存地址对应的存储介质中;分别将各个存储介质中的各个物理内存地址中的数据,拷贝到各个目标物理内存地址中。
其中,存储介质可以是存储数据的载体,用于存储物理内存地址中的数据。存储介质的存储大小可以根据物理内存地址来确定,例如,当物理内存地址为0x00000001-0x00000201时,该物理内存地址对应的存储介质的存储大小可以是200KB(Kilobyte,千字节)。
计算机设备可以从地址映射表中获取到各个物理内存地址,计算机设备可以获取各个物理内存地址中存储的数据。计算机设备在获取到各个物理内存地址后,可以根据各个物理内存地址获取到与各个物理内存地址对应的存储介质,其中,存储介质的存储大小可以根据物理内存地址来确定。
计算机设备可以将获取到的各个物理内存地址中存储的数据拷贝到与各个物理内存地址对应的存储介质中。例如,如图4所示,计算机设备获取到的各个物理内存地址分别是0x08001004-0x08001204、0x08002004-0x08002044、0x08003004-0x08003244,其中,物理内存地址0x08001004-0x08001204中存储的数据为数据A,且对应的存储介质为存储大小是200KB的存储介质,物理内存地址0x08002004-0x08002044中存储的数据为数据B,且对应的存储介质为存储大小是40KB的存储介质,物理内存地址0x08003004-0x08003244中存储的数据为数据C,且对应的存储介质为存储大小是240KB的存储介质,计算机设备可以将物理内存地址0x08001004-0x08001204中存储的数据A拷贝到存储大小为200KB的存储介质中;将物理内存地址0x08002004-0x08002044中存储的数据B拷贝到存储大小为40KB的存储介质中;将物理内存地址0x08003004-0x08003244中存储的数据C拷贝到存储大小为240KB的存储介质中。
计算机设备将各个物理内存地址中的数据拷贝到与各个物理内存地址对应的存储介质后,可以从各个存储介质中将各个物理内存地址中的数据拷贝到各个目标物理内存地址中。例如,如图4所示,计算机设备可以将存储大小为200KB的存储介质中的数据A拷贝到对应的目标物理内存地址0x00000001-0x00000201中,对应的目标物理内存地址0x00000202-0x00000242中,将存储大小为240KB的存储介质中的数据C拷贝到对应的目标物理内存地址为0x00000243-0x00000483中。
在本实施例中,计算机设备通过分别获取地址映射表中的各个物理内存地址,并获取各个物理内存地址中的数据,获取与各个物理内存地址对应的存储介质,并将各个物理内存地址中的数据拷贝到与各个物理内存地址对应的存储介质中,分别将各个存储介质中的各个物理内存地址中的数据,拷贝到各个目标物理内存地址中。计算机设备通过借助与各个物理内存地址对应的存储介质,将各个物理内存地址中的数据成功拷贝到各个目标物理内存地址中,实现了物理内存池的更新,由于各个目标物理内存地址是连续的,可以使得空闲内存的集中度提高。
在一个实施例中,提供的一种内存管理方法还可以包括根据各个目标物理内存地址更新地址映射表的过程,具体包括:将地址映射表中的各个物理内存地址,更新为与各个物理内存地址所对应的各个目标物理内存地址。
由于地址映射表中记录的是物理内存池中被使用的物理内存的物理内存地址,计算机设备在获取到各个物理内存地址对应的各个目标物理内存地址后,可以依次将地址映射表中的各个物理内存地址更新为对应的各个目标物理内存地址。
在本实施例中,计算机设备通过将地址映射表中的各个物理内存地址,更新为与各个物理内存地址所对应的各个目标物理内存地址。计算机设备通过对地址映射表中的各个物理内存地址进行更新,可以使得计算机设备查找到的物理内存地址都是最新的。
如图5所示,在一个实施例中,提供的一种内存管理方法还可以包括分别获取各个物理内存地址对应的目标物理内存地址的过程,具体步骤包括:
步骤502,获取各个物理内存地址在物理内存池中的排列顺序。
其中,各个物理内存地址在物理内存池中可以按照从低地址在前高地址在后的顺序排列,计算机设备可以获取各个物理内存地址在物理内存池中的排列顺序。例如,物理内存池中被使用的物理内存的物理内存地址分别是0x08001004-0x08001204、0x08003004-0x08003244、0x08002004-0x08002044,按照从低地址在前高地址在后的顺序,排在第一位的物理内存地址可以是最低的物理内存地址0x08001004-0x08001204,排在第二位的物理内存地址可以是0x08002004-0x08002044,排在第三位的物理内存地址可以是0x08003004-0x08003244,计算机设备可以获取物理内存池中各个物理内存地址的排列顺序。
步骤504,根据排列顺序,获取物理内存池中排在上一位的物理内存地址。
计算机设备在获取到排列顺序后,可以根据排列顺序获取到物理内存池中排在第一位的物理内存地址,其中,排在第一位的物理内存地址是排在第二位的物理内存地址上一位的物理内存地址。计算机设备可以将物理内存池中的最开始内存地址作为排在第一位的物理内存地址的最开始的目标物理内存地址。举例说明,物理内存池中排在第一位的物理内存地址为0x08001004-0x08001204,物理内存池中的最开始内存地址为0x00000001,排在第一位的物理内存地址所对应的目标物理内存地址为0x00000001-0x00000200。计算机设备可以将排在第一位的物理内存地址所对应的目标物理内存地址,作为排在第二位的物理内存地址的上一位的物理内存地址。举例说明,计算机设备获取到的排列顺序中,排在第一位的物理内存地址所对应的目标物理内存地址是0x00000001-0x00000200,排在第二位的是0x08002004-0x08002044,排在第三位的是0x08003004-0x08003244,以排在第二位的物理内存地址为基准,计算机设备可以获取物理内存池中排在上一位的物理内存地址,即排在第一位的物理内存地址所对应的目标物理内存地址0x00000001-0x00000200。
步骤506,根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址。
计算机设备在获取到上一位的物理内存地址后,可以得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址。具体的,计算机设备可以根据上一位的物理内存地址以及物理内存池中排在下一位的物理内存地址所对应的存储大小,得到排在下一位的物理内存地址所对应的目标物理内存地址。举例说明,计算机设备得到的上一位的物理内存地址为0x00000001-0x00000200,物理内存池中排在下一位的物理内存地址为0x08002004-0x08002044,计算机设备可以获取到排在下一位的物理内存地址0x08002004-0x08002044所对应的存储大小为40KB,计算机设备可以根据得到的上一位的物理内存地址0x00000001-0x00000200,以及排在下一位的物理内存地址所对应的存储大小40KB,得到排在下一位的物理内存地址所对应的目标物理内存地址为0x00000201-0x00000241。
步骤508,将排在下一位的物理内存地址所对应的目标物理内存地址,作为上一位的物理内存地址,并返回执行根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址的步骤,直到获取到物理内存池中的各个物理内存地址所对应的各个目标物理内存地址为止。
计算机设备可以将得到的排在下一位的物理内存地址所对应的目标物理内存地址,作为上一位的物理内存地址,再重复执行步骤506,直到计算机设备获取到物理内存池中的各个物理内存地址所对应的各个目标物理内存地址为止。
举例说明,计算机设备获取到的各个物理内存地址的排列顺序中,排在第一位的是0x00000001-0x00000200,排在第二位的是0x08002004-0x08002044,排在第三位的是0x08003004-0x08003244,计算机设备可以将根据上一位的物理内存地址,即排在第一位的物理内存地址0x00000001-0x00000200,以及排在下一位的物理内存地址,即排在第二位的物理内存地址0x08002004-0x08002044所对应的存储大小40KB,得到排在下一位的物理内存地址所对应的目标物理内存地址为0x00000201-0x00000241,接着,计算机设备可以将得到的排在下一位的物理内存地址所对应的目标物理内存地址0x00000201-0x00000241作为排在上一位的物理内存地址,计算机设备可以根据排在上一位的物理内存地址,即0x00000201-0x00000241,以及排在下一位的物理内存地址0x08003004-0x08003244所对应的存储大小240KB,得到排在下一位的物理内存地址0x08003004-0x08003244所对应的目标物理内存地址为0x00000242-0x00000482。
在本实施例中,计算机设备通过获取各个物理内存地址在物理内存池中的排列顺序,根据排列顺序,获取物理内存池中排在上一位的物理内存地址,根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址,将排在下一位的物理内存地址所对应的目标物理内存地址,作为上一位的物理内存地址,并返回执行根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址的步骤,直到获取到物理内存池中的各个物理内存地址所对应的各个目标物理内存地址为止。计算机设备可以通过将下一位物理内存地址对应的目标物理内存地址作为上一位的物理内存地址,并通过循环执行根据上一位物理内存地址得到下一位物理内存地址对应的目标物理内存地址的方式,得到物理内存池中的各个物理内存地址所对应的各个目标物理内存地址,可以使得到的各个目标物理内存地址连续。
在一个实施例中,提供的一种内存管理方法还可以包括申请内存地址的过程,具体包括:获取应用程序发送的内存地址申请请求;根据内存地址申请请求,在物理内存池中分配运行物理内存地址;从虚拟内存池中获取运行虚拟内存地址,并将运行虚拟内存地址返回给应用程序;在地址映射表中建立运行虚拟内存地址与运行物理内存地址之间的对应关系。
应用程序通常需要物理内存地址来运行,因此,每当应用程序需要运行时,应用程序可以发送内存地址申请请求。计算机设备可以获取应用程序发送的内存地址申请请求,并根据内存地址申请请求向应用程序返回一个虚拟内存地址,计算机设备可以将应用程序中的数据在返回的虚拟内存地址所对应的物理内存地址中进行读写操作。
计算机设备获取到应用程序发送的内存地址申请请求后,可以根据内存地址申请请求,在物理内存池中分配运行物理内存地址,其中,运行物理内存地址可以用于对应用程序中的数据进行读写操作。
虚拟内存池中可以有多个虚拟内存地址,包括已分配的虚拟内存地址和未分配的虚拟内存地址。计算机设备在分配运行物理内存地址后,可以在虚拟内存池中获取一个未分配的虚拟内存地址作为运行虚拟内存,计算机设备可以将获取到的运行虚拟内存地址返回给应用程序。计算机设备可以在地址映射表中建立运行虚拟内存地址与运行物理内存地址之间的对应关系。计算机设备返回运行虚拟内存地址给应用程序后,应用程序中的数据可以在运行虚拟内存地址所对应的运行物理内存地址中被进行读写操作。
在本实施例中,计算机设备通过获取应用程序发送的内存地址申请请求,根据内存地址申请请求,在物理内存池中分配运行物理内存地址,从虚拟内存池中获取运行虚拟内存地址,并将运行虚拟内存地址返回给应用程序,在地址映射表中建立运行虚拟内存地址与运行物理内存地址之间的对应关系。计算机设备根据内存地址申请请求,在物理内存池中分配运行物理内存地址,在虚拟内存池中分配运行虚拟内存地址,并在地址映射表中建立运行虚拟内存地址与运行物理内存地址之间的对应关系,在查找运行物理内存地址时可以直接根据地址映射表进行查找,提高了内存地址管理的便捷性。
在一个实施例中,提供的一种内存管理方法还可以包括获取运行虚拟内存地址的过程,具体包括:获取地址映射表中,与被使用的物理内存的物理内存地址对应的虚拟内存地址;在虚拟内存池中,对与被使用的物理内存的物理内存地址对应的虚拟内存地址进行标记;随机将虚拟内存池中未被标记的一个虚拟内存地址作为运行虚拟内存地址。
地址映射表中记录的物理内存地址为物理内存池中被使用的物理内存的物理内存地址,因此,地址映射表中记录的虚拟内存地址为虚拟内存池中被使用的虚拟内存地址。计算机设备可以在虚拟内存池中,对被使用的虚拟内存地址进行标记。当计算机设备获取到应用程序发送的内存地址申请请求后,由于应用程序中的数据不会在虚拟内存地址中被进行读写操作,因此,计算机设备可以获取虚拟内存池中未被标记的虚拟内存地址,并从这些未被标记的虚拟内存地址中随机选择一个作为运行虚拟内存地址。
在本实施例中,计算机设备通过获取地址映射表中,与被使用的物理内存的物理内存地址对应的虚拟内存地址,在虚拟内存池中,对与被使用的物理内存的物理内存地址对应的虚拟内存地址进行标记,随机将虚拟内存池中未被标记的一个虚拟内存地址作为运行虚拟内存地址。计算机设备通过将未被标记的虚拟内存地址作为运行虚拟内存地址,可以避免将一个虚拟内存地址与多个物理内存地址相对应。
在一个实施例中,提供的一种内存管理方法还可以包括分配运行物理内存地址的过程,具体包括:提取申请请求中的内存地址长度,并获取物理内存池中的空闲内存地址以及空闲内存地址长度;当空闲内存地址长度大于或等于请求的内存地址长度时,在空闲内存地址中,分配与请求的内存地址长度相等长度的运行物理内存地址。
应用程序发送的内存申请请求中,可以包含有请求的内存地址长度。其中,内存地址长度可以用于表示请求的运行物理内存地址能存储的大小。例如,当物理内存地址为0x00000201-0x00000241时,对应的内存地址长度也就是该物理内存地址存储的大小,为40KB。
计算机设备在获取到应用程序发送的内存申请请求后,可以提取内存申请请求中的内存地址长度。计算机设备可以获取物理内存池中的空闲内存地址以及空闲内存地址长度,并将获取的空闲内存地址长度与请求的内存地址长度进行比较。例如,计算机设备提取到的内存申请请求中的内存地址长度为100KB,获取到的物理内存池中的空闲内存地址为0x08003004-0x08003244,空闲内存地址长度为240KB,计算机设备可以将100KB与240KB进行比较。
计算机设备可以得到将空闲内存地址长度与请求的内存地址长度进行比较后的比较结果,当计算机设备得到的比较结果是空闲内存地址长度大于或者等于请求的内存地址长度时,计算机设备可以在空闲内存地址中,分配与请求的内存地址长度相等长度的运行物理内存地址。具体的,计算机设备可以根据请求的内存地址长度,截取与请求的内存地址长度相等的空闲内存地址长度,从而将截取的空闲内存地址长度对应的物理内存地址作为运行物理内存地址。
举例说明,计算机设备提取的请求的内存地址长度为100KB,获取到的物理内存池中的空闲内存地址为0x08003004-0x08003244,空闲内存地址长度为240KB,其中,空闲内存地址长度大于请求的内存地址长度,计算机设备可以在空闲内存地址长度中截取100KB,将与100KB对应的物理内存池中的空闲内存地址中的0x08003004-0x08003104作为运行物理内存地址。
在本实施例中,计算机设备通过提取申请请求中的内存地址长度,并获取物理内存池中的空闲内存地址以及空闲内存地址长度,当空闲内存地址长度大于或等于请求的内存地址长度时,在空闲内存地址中,分配与请求的内存地址长度相等长度的运行物理内存地址。计算机设备通过在空闲内存地址中分配与请求的内存地址长度相等长度的运行物理内存地址,可以使空闲内存地址得到最大化的利用,从而节约资源。
在一个实施例中,提供的一种内存管理方法还可以包括释放物理内存地址的过程,具体包括:获取内存地址释放请求,地址释放请求中包含有要释放的虚拟内存地址;在地址映射表中查找要释放的虚拟内存地址,并根据地址映射表获取与要释放的虚拟内存地址对应的物理内存地址;根据与要释放的虚拟内存地址对应的物理内存地址,释放物理内存池中的物理内存地址,并删除地址映射表中要释放的虚拟内存地址以及与要释放的虚拟内存地址对应的物理内存地址。
内存地址释放可以是将驻留在内存中的数据从内存中释放出来,以提高系统内存资源的利用率。内存地址释放请求可以是计算机设备中的各个应用程序发送的。计算机设备可以获取内存地址释放请求,并从内存释放请求中查找到要释放的虚拟内存地址。
计算机设备可以在地址映射表中查找是否有该要释放的虚拟内存地址,当计算机设备在地址映射表中查找到要释放的虚拟内存地址时,计算机设备可以根据地址映射表获取到与要释放的虚拟内存地址对应的物理内存地址。计算机设备可以在获取到物理内存地址后,将驻留在物理内存地址中的数据从物理内存地址中释放出来。计算机设备在释放驻留在物理内存地址中的数据后,可以在地址映射表中删除释放了内存数据的物理内存地址以及该物理内存地址对应的虚拟内存地址。
在本实施例中,计算机设备通过获取内存地址释放请求,地址释放请求中包含有要释放的虚拟内存地址,在地址映射表中查找要释放的虚拟内存地址,并根据地址映射表获取与要释放的虚拟内存地址对应的物理内存地址,根据与要释放的虚拟内存地址对应的物理内存地址,释放物理内存池中的物理内存地址,并删除地址映射表中要释放的虚拟内存地址以及与要释放的虚拟内存地址对应的物理内存地址。计算机设备根据内存地址释放请求将对应的物理内存地址中的数据释放掉,同时对地址映射表中的释放了数据的物理内存地址以及对应的虚拟内存地址进行删除,使得地址映射表中记录的物理内存地址以及虚拟内存地址都是最新的。
在另一个实施例中,提供的一种内存管理方法还可以包括释放物理内存地址的过程,具体包括:将保留在与要释放的虚拟内存地址对应的物理内存地址中的数据,从与要释放的虚拟内存地址对应的物理内存地址中释放出来,得到释放后的空闲的物理内存地址;获取物理内存池中的空闲物理内存地址;将释放后的空闲物理内存地址,按照预设顺序插入到物理内存池中的空闲物理内存地址中。
预设顺序可以是预先设置好的,用于放置空闲物理内存。其中,预设顺序可以是计算机设备根据物理内存地址的高低进行设置的,还可以是用户通过计算机设备设置的,在此不做限定。计算机设备可以将要释放的物理内存地址中的数据释放出来,从而得到释放后的空闲物理内存地址。
计算机设备可以获取物理内存池中的空闲物理内存地址,并按照预设顺序,将释放后的空闲物理内存地址插入到物理内存池中的空闲物理内存地址中。举例说明,当预设顺序是物理内存池中的物理内存地址从低到高排列时,计算机设备获取到的释放后的空闲物理内存地址为0x08003004-0x08003244,而物理内存池中的空闲物理内存地址为0x08001004-0x08008000,计算机设备可以将释放后的空闲物理内存地址插入到空闲物理内存地址中的0x08003004-0x08003244位置处,因此,物理内存池中的空闲物理内存地址更新为0x08001004-0x08008240。
在本实施例中,计算机设备通过将保留在与要释放的虚拟内存地址对应的物理内存地址中的数据,从与要释放的虚拟内存地址对应的物理内存地址中释放出来,得到释放后的空闲的物理内存地址,获取物理内存池中的空闲物理内存地址,将释放后的空闲物理内存地址,按照预设顺序插入到物理内存池中的空闲物理内存地址中。计算机设备通过将释放后的空闲物理内存地址,按照预设顺序插入到屋里内存池中的空闲物理内存地址中,可以提高物理内存池中的空闲物理内存地址对应的存储大小,并提高系统内存资源的利用率。
应该理解的是,虽然上述各个流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述各个流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种内存管理装置,包括:使用率获取模块610、地址映射表获取模块620、目标物理内存地址获取模块630和更新模块640,其中:
使用率获取模块610,用于获取物理内存池的使用率。
地址映射表获取模块620,用于当物理内存池的使用率大于使用阈值时,获取地址映射表,其中,地址映射表用于记录物理内存池中被使用的物理内存的物理内存地址。
目标物理内存地址获取模块630,用于当地址映射表中的各个物理内存地址不连续时,分别获取各个物理内存地址对应的目标物理内存地址,其中,各个目标物理内存地址是连续的。
更新模块640,用于根据各个目标物理内存地址,更新地址映射表以及物理内存池。
在一个实施例中,更新模块640还用于分别获取地址映射表中的各个物理内存地址,并获取各个物理内存地址中的数据;获取与各个物理内存地址对应的存储介质,并将各个物理内存地址中的数据拷贝到与各个物理内存地址对应的存储介质中;分别将各个存储介质中的各个物理内存地址中的数据,拷贝到各个目标物理内存地址中。
在另一个实施例中,更新模块640还用于将地址映射表中的各个物理内存地址,更新为与各个物理内存地址所对应的各个目标物理内存地址。
在一个实施例中,目标物理内存地址获取模块630还用于获取各个物理内存地址在物理内存池中的排列顺序;根据排列顺序,获取物理内存池中排在上一位的物理内存地址;根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址;将排在下一位的物理内存地址所对应的目标物理内存地址,作为上一位的物理内存地址,并返回执行根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址,直到获取到物理内存池中的各个物理内存地址所对应的各个目标物理内存地址为止。
在一个实施例中,提供的一种内存管理装置还可以包括内存地址申请模块,用于获取应用程序发送的内存地址申请请求;根据内存地址申请请求,在物理内存池中分配运行物理内存地址;从虚拟内存池中获取运行虚拟内存地址,并将运行虚拟内存地址返回给应用程序;在地址映射表中建立运行虚拟内存地址与运行物理内存地址之间的对应关系。
在一个实施例中,内存地址申请模块还用于获取地址映射表中,与被使用的物理内存的物理内存地址对应的虚拟内存地址;在虚拟内存池中,对与被使用的物理内存的物理内存地址对应的虚拟内存地址进行标记;随机将虚拟内存池中未被标记的一个虚拟内存地址作为运行虚拟内存地址。
在一个实施例中,内存地址申请模块还用于提取申请请求中的内存地址长度,并获取物理内存池中的空闲内存地址以及空闲内存地址长度;当空闲内存地址长度大于或等于请求的内存地址长度时,在空闲内存地址中,分配与请求的内存地址长度相等长度的运行物理内存地址。
在一个实施例中,提供的一种内存管理装置还可以包括内存地址释放模块,用于获取内存地址释放请求,地址释放请求中包含有要释放的虚拟内存地址;在地址映射表中查找要释放的虚拟内存地址,并根据地址映射表获取与要释放的虚拟内存地址对应的物理内存地址;根据与所述放的虚拟内存地址对应的物理内存地址,释放物理内存池中的物理内存地址,并删除地址映射表中要释放的虚拟内存地址以及与要释放的虚拟内存地址对应的物理内存地址。
在一个实施例中,内存地址释放模块还用于将保留在与要释放的虚拟内存地址对应的物理内存地址中的数据,从与要释放的虚拟内存地址对应的物理内存地址中释放出来,得到释放后的空闲的物理内存地址;获取物理内存池中的空闲物理内存地址;将释放后的空闲物理内存地址,按照预设顺序插入到物理内存池中的空闲物理内存地址中。
关于内存管理装置的具体限定可以参见上文中对于内存管理方法的限定,在此不再赘述。上述内存管理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种内存管理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取物理内存池的使用率;
当物理内存池的使用率大于使用阈值时,获取地址映射表,其中,地址映射表用于记录物理内存池中被使用的物理内存的物理内存地址;
当地址映射表中的各个物理内存地址不连续时,分别获取各个物理内存地址对应的目标物理内存地址,其中,各个目标物理内存地址是连续的;
根据各个目标物理内存地址更新地址映射表,并根据各个目标物理内存地址更新物理内存池。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:分别获取地址映射表中的各个物理内存地址,并获取各个物理内存地址中的数据;获取与各个物理内存地址对应的存储介质,并将各个物理内存地址中的数据拷贝到与各个物理内存地址对应的存储介质中;分别将各个存储介质中的各个物理内存地址中的数据,拷贝到各个目标物理内存地址中。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:将地址映射表中的各个物理内存地址,更新为与各个物理内存地址所对应的各个目标物理内存地址。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取各个物理内存地址在物理内存池中的排列顺序;根据排列顺序,获取物理内存池中排在上一位的物理内存地址;根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址;将排在下一位的物理内存地址所对应的目标物理内存地址,作为上一位的物理内存地址,并返回执行根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址,直到获取到物理内存池中的各个物理内存地址所对应的各个目标物理内存地址为止。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取应用程序发送的内存地址申请请求;根据内存地址申请请求,在物理内存池中分配运行物理内存地址;从虚拟内存池中获取运行虚拟内存地址,并将运行虚拟内存地址返回给应用程序;在地址映射表中建立运行虚拟内存地址与运行物理内存地址之间的对应关系。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取地址映射表中,与被使用的物理内存的物理内存地址对应的虚拟内存地址;在虚拟内存池中,对与被使用的物理内存的物理内存地址对应的虚拟内存地址进行标记;随机将虚拟内存池中未被标记的一个虚拟内存地址作为运行虚拟内存地址。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:提取申请请求中的内存地址长度,并获取物理内存池中的空闲内存地址以及空闲内存地址长度;当空闲内存地址长度大于或等于请求的内存地址长度时,在空闲内存地址中,分配与请求的内存地址长度相等长度的运行物理内存地址。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取内存地址释放请求,地址释放请求中包含有要释放的虚拟内存地址;在地址映射表中查找要释放的虚拟内存地址,并根据地址映射表获取与要释放的虚拟内存地址对应的物理内存地址;根据与要释放的虚拟内存地址对应的物理内存地址,释放物理内存池中的物理内存地址,并删除地址映射表中要释放的虚拟内存地址以及与要释放的虚拟内存地址对应的物理内存地址。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:将保留在与要释放的虚拟内存地址对应的物理内存地址中的数据,从与要释放的虚拟内存地址对应的物理内存地址中释放出来,得到释放后的空闲的物理内存地址;获取物理内存池中的空闲物理内存地址;将释放后的空闲物理内存地址,按照预设顺序插入到物理内存池中的空闲物理内存地址中。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取物理内存池的使用率;
当物理内存池的使用率大于使用阈值时,获取地址映射表,其中,地址映射表用于记录物理内存池中被使用的物理内存的物理内存地址;
当地址映射表中的各个物理内存地址不连续时,分别获取各个物理内存地址对应的目标物理内存地址,其中,各个目标物理内存地址是连续的;
根据各个目标物理内存地址更新地址映射表,并根据各个目标物理内存地址更新物理内存池。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:分别获取地址映射表中的各个物理内存地址,并获取各个物理内存地址中的数据;获取与各个物理内存地址对应的存储介质,并将各个物理内存地址中的数据拷贝到与各个物理内存地址对应的存储介质中;分别将各个存储介质中的各个物理内存地址中的数据,拷贝到各个目标物理内存地址中。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:将地址映射表中的各个物理内存地址,更新为与各个物理内存地址所对应的各个目标物理内存地址。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取各个物理内存地址在物理内存池中的排列顺序;根据排列顺序,获取物理内存池中排在上一位的物理内存地址;根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址;将排在下一位的物理内存地址所对应的目标物理内存地址,作为上一位的物理内存地址,并返回执行根据上一位的物理内存地址,得到物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址,直到获取到物理内存池中的各个物理内存地址所对应的各个目标物理内存地址为止。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取应用程序发送的内存地址申请请求;根据内存地址申请请求,在物理内存池中分配运行物理内存地址;从虚拟内存池中获取运行虚拟内存地址,并将运行虚拟内存地址返回给应用程序;在地址映射表中建立运行虚拟内存地址与运行物理内存地址之间的对应关系。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取地址映射表中,与被使用的物理内存的物理内存地址对应的虚拟内存地址;在虚拟内存池中,对与被使用的物理内存的物理内存地址对应的虚拟内存地址进行标记;随机将虚拟内存池中未被标记的一个虚拟内存地址作为运行虚拟内存地址。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:提取申请请求中的内存地址长度,并获取物理内存池中的空闲内存地址以及空闲内存地址长度;当空闲内存地址长度大于或等于请求的内存地址长度时,在空闲内存地址中,分配与请求的内存地址长度相等长度的运行物理内存地址。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取内存地址释放请求,地址释放请求中包含有要释放的虚拟内存地址;在地址映射表中查找要释放的虚拟内存地址,并根据地址映射表获取与要释放的虚拟内存地址对应的物理内存地址;根据与要释放的虚拟内存地址对应的物理内存地址,释放物理内存池中的物理内存地址,并删除地址映射表中要释放的虚拟内存地址以及与要释放的虚拟内存地址对应的物理内存地址。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:将保留在与要释放的虚拟内存地址对应的物理内存地址中的数据,从与要释放的虚拟内存地址对应的物理内存地址中释放出来,得到释放后的空闲的物理内存地址;获取物理内存池中的空闲物理内存地址;将释放后的空闲物理内存地址,按照预设顺序插入到物理内存池中的空闲物理内存地址中。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (12)
1.一种内存管理方法,所述方法包括:
获取物理内存池的使用率;
当所述物理内存池的使用率大于使用阈值时,获取地址映射表,其中,所述地址映射表用于记录所述物理内存池中被使用的物理内存的物理内存地址;
当所述地址映射表中的各个物理内存地址不连续时,分别获取各个所述物理内存地址对应的目标物理内存地址,其中,各个所述目标物理内存地址是连续的;
根据各个所述目标物理内存地址更新所述地址映射表,并根据各个所述目标物理内存地址更新所述物理内存池。
2.根据权利要求1所述的方法,其特征在于,所述根据各个所述目标物理内存地址更新所述物理内存池,包括:
分别获取所述地址映射表中的各个所述物理内存地址,并获取各个所述物理内存地址中的数据;
获取与各个所述物理内存地址对应的存储介质,并将各个所述物理内存地址中的数据拷贝到与各个所述物理内存地址对应的存储介质中;
分别将各个所述存储介质中的各个所述物理内存地址中的数据,拷贝到各个所述目标物理内存地址中。
3.根据权利要求1所述的方法,其特征在于,所述根据各个所述目标物理内存地址更新所述地址映射表,包括:
将所述地址映射表中的各个所述物理内存地址,更新为与各个所述物理内存地址所对应的各个所述目标物理内存地址。
4.根据权利要求1所述的方法,其特征在于,所述分别获取各个所述物理内存地址对应的目标物理内存地址,包括:
获取各个所述物理内存地址在所述物理内存池中的排列顺序;
根据所述排列顺序,获取所述物理内存池中排在上一位的物理内存地址;
根据所述上一位的物理内存地址,得到所述物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址;
将所述排在下一位的物理内存地址所对应的目标物理内存地址,作为所述上一位的物理内存地址,并返回执行根据所述上一位的物理内存地址,得到所述物理内存池中排在下一位的物理内存地址所对应的目标物理内存地址的步骤,直到获取到所述物理内存池中的各个所述物理内存地址所对应的目标物理内存地址为止。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取应用程序发送的内存地址申请请求;
根据所述内存地址申请请求,在所述物理内存池中分配运行物理内存地址;
从虚拟内存池中获取运行虚拟内存地址,并将所述运行虚拟内存地址返回给所述应用程序;
在所述地址映射表中建立所述运行虚拟内存地址与所述运行物理内存地址之间的对应关系。
6.根据权利要求5所述的方法,其特征在于,所述从虚拟内存池中获取运行虚拟内存地址,包括:
获取所述地址映射表中,与所述被使用的物理内存的物理内存地址对应的虚拟内存地址;
在所述虚拟内存池中,对与所述被使用的物理内存的物理内存地址对应的虚拟内存地址进行标记;
随机将所述虚拟内存池中未被标记的一个虚拟内存地址作为所述运行虚拟内存地址。
7.根据权利要求5所述的方法,其特征在于,所述申请请求中包含有请求的内存地址长度;
所述根据所述内存地址申请请求,在所述物理内存池中分配运行物理内存地址,包括:
提取所述申请请求中的所述内存地址长度,并获取所述物理内存池中的空闲内存地址以及所述空闲内存地址长度;
当所述空闲内存地址长度大于或等于所述请求的内存地址长度时,在所述空闲内存地址中,分配与所述请求的内存地址长度相等长度的运行物理内存地址。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取内存地址释放请求,所述地址释放请求中包含有要释放的虚拟内存地址;
在所述地址映射表中查找所述要释放的虚拟内存地址,并根据所述地址映射表获取与所述要释放的虚拟内存地址对应的物理内存地址;
根据与所述要释放的虚拟内存地址对应的物理内存地址,释放所述物理内存池中的物理内存地址,并删除所述地址映射表中所述要释放的虚拟内存地址以及与所述要释放的虚拟内存地址对应的物理内存地址。
9.根据权利要求8所述的方法,其特征在于,所述根据与所述要释放的虚拟内存地址对应的物理内存地址,释放所述物理内存池中的物理内存地址,包括:
将保留在与所述要释放的虚拟内存地址对应的物理内存地址中的数据,从与所述要释放的虚拟内存地址对应的物理内存地址中释放出来,得到释放后的空闲的物理内存地址;
所述方法还包括:
获取所述物理内存池中的空闲物理内存地址;
将所述释放后的空闲物理内存地址,按照预设顺序插入到所述物理内存池中的空闲物理内存地址中。
10.一种内存管理装置,其特征在于,所述装置包括:
使用率获取模块,用于获取物理内存池的使用率;
地址映射表获取模块,用于当所述物理内存池的使用率大于使用阈值时,获取地址映射表,其中,所述地址映射表用于记录所述物理内存池中被使用的物理内存的物理内存地址;
目标物理内存地址获取模块,用于当所述地址映射表中的各个物理内存地址不连续时,分别获取各个所述物理内存地址对应的目标物理内存地址,其中,各个所述目标物理内存地址是连续的;
更新模块,用于根据各个所述目标物理内存地址,更新所述地址映射表以及所述物理内存池。
11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910179847.3A CN110008140B (zh) | 2019-03-11 | 2019-03-11 | 内存管理方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910179847.3A CN110008140B (zh) | 2019-03-11 | 2019-03-11 | 内存管理方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110008140A true CN110008140A (zh) | 2019-07-12 |
CN110008140B CN110008140B (zh) | 2021-08-17 |
Family
ID=67166741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910179847.3A Active CN110008140B (zh) | 2019-03-11 | 2019-03-11 | 内存管理方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110008140B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338981A (zh) * | 2020-02-21 | 2020-06-26 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、系统及储存介质 |
WO2022170769A1 (zh) * | 2021-02-10 | 2022-08-18 | 华为技术有限公司 | 通信方法、装置及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070230477A1 (en) * | 2006-04-03 | 2007-10-04 | Worley John S | Method and system for managing computational resources |
US20100020885A1 (en) * | 2008-07-22 | 2010-01-28 | International Business Machines Corporation | Picture processing via a shared decoded picture pool |
CN103455443A (zh) * | 2013-09-04 | 2013-12-18 | 华为技术有限公司 | 一种缓存管理方法和装置 |
CN104239222A (zh) * | 2013-06-20 | 2014-12-24 | 华为技术有限公司 | 一种内存访问方法、设备和系统 |
CN104346284A (zh) * | 2013-08-02 | 2015-02-11 | 华为技术有限公司 | 一种内存管理方法及内存管理设备 |
-
2019
- 2019-03-11 CN CN201910179847.3A patent/CN110008140B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070230477A1 (en) * | 2006-04-03 | 2007-10-04 | Worley John S | Method and system for managing computational resources |
US20100020885A1 (en) * | 2008-07-22 | 2010-01-28 | International Business Machines Corporation | Picture processing via a shared decoded picture pool |
CN104239222A (zh) * | 2013-06-20 | 2014-12-24 | 华为技术有限公司 | 一种内存访问方法、设备和系统 |
CN104346284A (zh) * | 2013-08-02 | 2015-02-11 | 华为技术有限公司 | 一种内存管理方法及内存管理设备 |
CN103455443A (zh) * | 2013-09-04 | 2013-12-18 | 华为技术有限公司 | 一种缓存管理方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338981A (zh) * | 2020-02-21 | 2020-06-26 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、系统及储存介质 |
WO2022170769A1 (zh) * | 2021-02-10 | 2022-08-18 | 华为技术有限公司 | 通信方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110008140B (zh) | 2021-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101354681B (zh) | 存储器系统、非易失性存储器的磨损均衡方法及装置 | |
CN109542961A (zh) | 数据存储方法、装置、计算机设备和存储介质 | |
KR101484816B1 (ko) | 비휘발성 메모리 시스템 내의 미사용 논리 어드레스들의 마운트 시간 맵핑 해제 | |
RU2661280C2 (ru) | Контроллер массива, твердотельный диск и способ для управления твердотельным диском для записи данных | |
US11237756B2 (en) | System and method of writing to nonvolatile memory using write buffers | |
CN107066498B (zh) | 键值kv存储方法和装置 | |
CN106527963A (zh) | 存储器系统及主机装置 | |
CN112947856B (zh) | 一种内存数据的管理方法、装置、计算机设备及存储介质 | |
US11385900B2 (en) | Accessing queue data | |
CN111506269A (zh) | 一种磁盘存储空间分配方法、装置、设备及存储介质 | |
CN110213326A (zh) | 元数据节点集群的扩容方法、系统、设备和存储介质 | |
CN109815425A (zh) | 缓存数据处理方法、装置、计算机设备和存储介质 | |
CN110069218A (zh) | 冷热数据分离方法、装置、计算机设备及存储介质 | |
CN110377599A (zh) | 键值存储装置及其操作方法 | |
US20240338135A1 (en) | Storage space allocation method, terminal device and storage medium | |
CN110008140A (zh) | 内存管理方法、装置、计算机设备和存储介质 | |
CN109937449A (zh) | 存储器管理 | |
CN112579595A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN108829342B (zh) | 一种日志存储方法、系统及存储装置 | |
CN116089321A (zh) | 内存管理方法、装置、电子装置和存储介质 | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN110688065A (zh) | 一种存储空间管理方法、系统、电子设备及存储介质 | |
CN109542800A (zh) | 基于闪存的垃圾处理的方法、固态硬盘以及存储装置 | |
CN110162395A (zh) | 一种内存分配的方法及装置 | |
CN112800123A (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 |