CN102760080B - 一种内存管理的方法和装置 - Google Patents
一种内存管理的方法和装置 Download PDFInfo
- Publication number
- CN102760080B CN102760080B CN201110104991.4A CN201110104991A CN102760080B CN 102760080 B CN102760080 B CN 102760080B CN 201110104991 A CN201110104991 A CN 201110104991A CN 102760080 B CN102760080 B CN 102760080B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory node
- node
- free
- application
- 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
Landscapes
- Memory System (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种内存管理的方法和装置,属于计算机技术领域。所述方法包括:通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并初始化所述内存池;根据所述内存池设置内存节点;当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。所述装置包括:内存池处理模块、内存节点设置模块和内存分配模块。本发明通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,实现本地自己对内存进行管理,从而方便在不同平台之间进行移植。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种内存管理的方法和装置。
背景技术
随着计算机网络技术的发展,无线互联网技术也在迅速地发展,使得用户不但可以通过移动终端设备(例如手机等)随时随地地与他人通话,还可以通过移动终端设备上的各种类型的应用程序,例如即时通信软件、阅读器、移动终端浏览器、地图搜索等,实现其他各种功能。
目前在移动终端设备上的应用程序运行过程中,直接使用移动终端设备的平台(移动终端设备应用程序软件的运行环境)提供的不同内存API(ApplicationProgrammingInterface,应用程序编程接口)为该应用程序的不同功能分配或释放内存。
然而,在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
移动终端设备的特点是平台很多,不同平台提供的内存API有可能不同,当将适用于某平台的应用程序移植到其他平台时可能会无法正常运行,为应用程序的移植带来困难。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种内存管理的方法和装置。所述技术方案如下:
一种内存管理的方法,所述方法包括:
通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并初始化所述内存池;
根据所述内存池设置内存节点;
当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。
一种内存管理的装置,所述装置包括:
内存池处理模块,用于通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并初始化所述内存池;
内存节点设置模块,用于在所述内存池处理模块初始化所述内存池后,根据所述内存池设置内存节点;
内存分配模块,用于当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。
本发明实施例提供的技术方案的有益效果是:
通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,实现本地自己对内存进行管理,从而方便在不同平台之间进行移植。
附图说明
图1是本发明实施例1提供的一种内存管理的方法流程图;
图2是本发明实施例2提供的一种内存管理的方法流程图;
图3是本发明实施例3提供的第一种内存管理的装置结构示意图;
图4是本发明实施例3提供的第二种内存管理的装置结构示意图;
图5是本发明实施例3提供的第三种内存管理的装置结构示意图;
图6是本发明实施例3提供的第四种内存管理的装置结构示意图;
图7是本发明实施例3提供的第五种内存管理的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
参见图1,本发明实施例提供了一种内存管理的方法,包括:
101:通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并初始化该内存池。
102:根据该内存池设置内存节点。
103:当本地的任一应用程序功能需要使用内存时,为该应用程序功能分配一个内存等于该应用程序功能所需要内存的空闲内存节点。
进一步地,当本地的任一应用程序功能需要使用内存时,为该应用程序功能分配一个内存等于该应用程序功能所需要内存的空闲内存节点,具体包括:
当本地的任一应用程序功能需要使用内存时,查询内存节点链表;
判断是否能够查询到一个内存大于等于该应用程序功能所需要内存的第一空闲内存节点;
如果能够,则对该第一空闲内存节点进行分裂,得到一个内存等于该应用程序功能所需要内存的第二空闲内存节点,将第二空闲内存节点分配给该应用程序功能。
进一步,对该第一空闲内存节点进行分裂,得到一个内存等于该应用程序功能所需要内存的第二空闲内存节点,将第二空闲内存节点分配给该应用程序功能,具体包括:
将第一空闲内存节点从内存节点链表中删除;
将第一空闲内存节点分裂为一个内存等于该应用程序功能所需要内存的第二空闲内存节点,以及一个内存等于第一空闲内存节点的内存与第二空闲内存节点的内存之差的第三空闲内存节点;
将第二空闲内存节点的内存节点状态设置为使用状态,然后分配给该应用程序功能,将第三空闲内存节点插入到内存节点链表中,对内存池的属性进行更改。
进一步,该方法还包括:
当本地的任一应用程序功能需要释放内存时,获取该应用程序功能所使用的内存节点的物理位置,将该应用程序功能所使用的内存节点的内存节点状态修改为空闲状态,并修改内存池的属性;
判断该应用程序功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点,
如果没有,则将该应用程序功能所使用的内存节点插到内存节点链表中。
进一步地,该方法还包括:
当判断该应用程序功能所使用的内存节点的物理相邻的内存节点中有空闲内存节点时,将该应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点;
判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点;
如果没有,则将合并得到的内存节点插到内存节点链表中。
进一步地,该方法还包括:
当判断合并得到的内存节点的物理相邻的内存节点中有空闲内存节点时,将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后执行判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点的步骤。
进一步,该方法还包括:
当本地退出时,根据内存池的属性打印出所有内存节点的使用情况以及内存非法操作记录,调用平台的内存应用程序编程接口API释放掉内存池。
本发明实施例所述的内存管理的方法,通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,实现本地自己对内存进行管理,从而方便在不同平台之间进行移植。通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,便于对内存的使用情况进行跟踪,避免内存使用越界的情况。根据内存池的属性打印出的所有内存节点的使用情况以及内存非法操作记录,可以查找出移动终端浏览器应用程序哪些地方使用内存非法、哪些地方造成内存泄露,从而可以进行相应的更改避免使用内存非法和内存泄露。并且当本地程序代码逻辑出问题时,根据内存池的属性打印出的所有内存节点的使用情况以及内存非法操作记录中会记录逻辑出问题的位置,从而可以进行相应的修改避免死机。另外,当引用内存的时候,可以加上检查,如果检查到引用位置非法可以提示用户出现严重问题,请将相关信息反馈给开发商。
本发明实施例所述的内存管理的方法,可以应用于移动终端设备上的各种类型的应用程序中,也可以应用于计算机等其他设备上的各种类型的应用程序中,对此不做具体限定。为了便于理解,下面以应用于移动终端浏览器应用程序为例进行进一步说明。
实施例2
参见图2,本发明实施例提供了一种内存管理的方法,包括:
201:当移动终端浏览器应用程序启动时,移动终端浏览器应用程序通过平台的内存API获取一预设大小的内存作为其自身的内存池,并初始化该内存池。
具体地,当移动终端浏览器应用程序启动时,移动终端浏览器应用程序通过平台的内存API向平台申请一预设大小的内存,平台接收到申请后,通过内存API为该移动终端浏览器应用程序分配一预设大小的内存。
具体地,可以根据移动终端浏览器应用程序中各个功能需要的内存估计该移动终端浏览器应用程序需要的内存大小,设置一预设大小的内存。并可以根据移动终端浏览器应用程序最终的运行结果,对预设大小的内存进行调整,以达到最优的结果。例如:假设本发明实施例中根据移动终端浏览器应用程序中各个功能需要的内存估计该移动终端浏览器应用程序需要的内存大小为500k,则设置预设大小的内存为500k。后根据移动终端浏览器应用程序最终的运行结果发现该移动终端浏览器应用程序需要400k的内存就可以正常运行,因此可以将预设大小的内存修改为400k。
具体地,本发明实施例中为内存池设置一个内存池结构体来描述其属性,内存池结构体中包括内存池首地址、内存池大小、内存池使用字节数、内存池空闲字节数、内存节点链表表头、用于调试的内存分配次数、内存释放次数、内存分配次数、最大内存节点个数、当前内存节点个数、内存分配的文件名和行数等内存池属性,但是需要说明的是并不限于上述属性,可以根据实际应用状况增加其他属性或减少其中某些属性。初始化内存池即将各个内存池属性赋给内存池结构体。
202:根据该内存池设置内存节点(Node)。
具体地,本发明实施例中内存管理基于内存节点概念,当移动终端浏览器应用程序的任一功能需要使用内存时,通过为该功能分配内存节点的方式实现,本发明实施例中定义一个内存节点结构体去描述这个内存节点的属性,内存节点结构体中包括内存节点状态(包括空闲(free)和使用2种状态)、内存节点长度、分配内存节点所在的移动终端浏览器应用程序文件名以及所在文件的行号、内存节点存在时间、指向内存节点的两个指针等属性,但是需要说明的是并不限于上述属性,可以根据实际应用状况增加其他属性或减少其中某些属性。其中,指向内存节点的两个指针中的一个指针指向该内存节点的前一个内存节点的尾地址、另一个指针指向该内存节点的后一个内存节点的首地址,各个内存节点的指针构成链表结构,通过链表结构去描述各个空闲内存节点(内存节点状态为空闲的内存节点),以供查找和使用,并且在被分配进行使用的内存节点中内存节点的两个指针域是可以被填充用户数据的,这样可以节省些内存。各个空闲内存节点的指针以链表结构存在,形成内存节点链表,通过查询内存节点链表可以得到各个空闲内存节点。
具体地,根据该内存池设置内存节点,是将整个内存池作为一个内存节点,并设置该内存节点的内存节点状态是空闲。例如:假设本发明实施例中设置预设大小的内存为500k,则该移动终端浏览器应用程序的内存池为500k,设置的内存节点为500k,且该内存节点的内存节点状态是空闲。
203:检测移动终端浏览器应用程序的运行状态,如果是移动终端浏览器应用程序的任一功能需要使用内存的状态,则执行204;如果是移动终端浏览器应用程序的任一功能需要释放内存的状态,则执行206;如果是移动终端浏览器应用程序退出的状态,则执行212。
204:移动终端浏览器应用程序查询内存节点链表,判断是否能够查询到一个内存大于等于该功能所需要内存的第一空闲内存节点(记作pNode1),如果能则执行205;否则,执行212。
例如:假设移动终端浏览器应用程序的任一功能需要使用一个32字节的内存,移动终端浏览器应用程序查询内存节点链表,得到一个字节数大于32字节的第一空闲内存节点,则执行205。并且,查询到第一空闲内存节点即可以得到第一空闲内存节点的首地址从而确定第一空闲内存节点的具体物理位置。
其中,移动终端浏览器应用程序的该功能所需要内存的大小为:该功能所需要使用的用户数据占用的内存,加上内存节点结构体的大小,再加上内存节点尾部结构体的大小(用来存放内存节点的长度,一般为4个字节)。但是,如果内存节点的两个指针域也用于填充用户数据,则移动终端浏览器应用程序的该功能所需要内存的大小为:该功能所需要使用的用户数据占用的内存,加上内存节点结构体的大小(去掉两个指针的大小),再加上内存节点尾部结构体的大小。
205:移动终端浏览器应用程序对该第一空闲内存节点进行分裂,得到一个内存等于该功能所需要内存的第二空闲内存节点(记作pNode2),将第二空闲内存节点分配给移动终端浏览器应用程序的该功能,然后执行203。
具体地,分裂的过程如下:将第一空闲内存节点从内存节点链表中删除;按照第一空闲内存节点的内存的大小和移动终端浏览器应用程序的该功能所需要的内存的大小,将第一空闲内存节点分裂为一个内存的大小与移动终端浏览器应用程序的该功能所需要的内存的大小相等的第二空闲内存节点(记作pNode2),以及一个内存的大小为第一空闲内存节点的内存的大小与第二空闲内存节点的内存的大小之差的第三空闲内存节点(记作pNode3);将第二空闲内存节点的状态设置为使用状态,分配给移动终端浏览器应用程序的该功能,将第三空闲内存节点插入到内存节点链表中;对内存池的属性进行更改,比如,最大内存节点个数、当前内存节点个数、内存分配次数、内存使用字节数、内存空闲字节数、内存分配的文件名和行数等。
206:获取移动终端浏览器应用程序的该功能所使用的内存节点的物理位置,将该功能所使用的内存节点的内存节点状态修改为空闲状态,修改内存池的属性(比如内存释放次数等),判断该功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点,如果有,则执行207;否则,执行211。
其中,获取移动终端浏览器应用程序的该功能所使用的内存节点的物理位置具体可以通过获取移动终端浏览器应用程序的该功能所使用的内存节点的内存地址的方法实现。
207:将该功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点。
208:判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点,如果有,则执行209;否则,执行210。
209:将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后执行208。
210:将合并得到的内存节点插到内存节点链表中,然后执行203。
211:将该功能所使用的内存节点插到内存节点链表中,然后执行203。
例如:假设以204-205的方式为移动终端浏览器应用程序中的3个功能分别分配了一个内存节点(分别记作pNode1、pNode2、pNode3),相应的内存节点地址存在3个变量(分别记作pMem1、pMem2、pMem3)中,此时内存池中有4个内存节点,其中3个是使用状态,1个是空闲状态,其中,3个被分配内存节点依次物理相邻,1个空闲状态的内存节点在pNode3物理位置的右侧,假设要释放pNode2、pNode3,过程如下:
首先释放pNode2时,根据pMem2得到pNode2的首地址,将pNode2的内存节点状态修改为空闲状态,然后修改内存池的属性,比如内存节点空闲次数等。判断pNode2的物理相邻的内存节点中是否有空闲内存节点,此时pNode2的物理相邻的内存节点中没有空闲内存节点,所以将pNode2插到内存节点链表中。并且由于pNode2在空闲内存节点物理位置的左侧,所以将pNode2变成内存节点链表的表头。然后再释放pNode3时,根据pMem3得到pNode3的首地址,将pNode3的内存节点状态修改为空闲状态,然后修改内存池的属性,比如内存节点空闲次数等。判断pNode3的物理相邻的内存节点中是否有空闲内存节点,此时pNode3的物理相邻的内存节点中有空闲内存节点(pNode2),所以将pNode3和pNode2合并,pNode3和pNode2合并后的内存节点的物理相邻右节点也是一个空闲内存节点,所以再次进行合并,这样整个内存池变为两个内存节点,一个pNode1和一个合并得到的空闲内存节点。如果后续接着还要释放pNode1,则释放pNode1后,整个内存池又回到初始状态。
212:根据内存池的属性打印出所有内存节点的使用情况以及内存非法操作记录,调用平台的内存API释放掉内存池。
需要说明的是,本发明实施例中是将上述内存管理的方法直接嵌套到移动终端浏览器应用程序中来实现内存管理的,实际应用中还可以将上述内存管理的方法单独作为一个内存管理子程序,在移动终端浏览器应用程序运行到内存管理的地方时,通过调用内存管理子程序相应的接口即可,对具体的实现方法不做具体限定。
本发明实施例所述的内存管理的方法,移动终端浏览器应用程序通过获取一预设大小的内存作为其自身的内存池,并通过内存节点的方式为该应用程序的不同功能分配或释放内存,实现自己对内存进行管理,从而方便在不同平台之间进行移植。移动终端浏览器应用程序通过获取一预设大小的内存作为其自身的内存池,并通过内存节点的方式为该应用程序的不同功能分配或释放内存,便于对内存的使用情况进行跟踪,避免内存使用越界的情况。根据内存池的属性打印出的所有内存节点的使用情况以及内存非法操作记录,可以查找出移动终端浏览器应用程序哪些地方使用内存非法、哪些地方造成内存泄露,从而可以进行相应的更改避免使用内存非法和内存泄露。并且当移动终端浏览器应用程序代码逻辑出问题时,根据内存池的属性打印出的所有内存节点的使用情况以及内存非法操作记录中会记录逻辑出问题的位置,从而可以进行相应的修改避免死机。另外,当引用内存的时候,可以加上检查,如果检查到引用位置非法可以提示用户出现严重问题,请将相关信息反馈给开发商。
实施例3
参见图3,本发明实施例提供了一种内存管理的装置,包括:
内存池处理模块301,用于通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并初始化内存池;
内存节点设置模块302,用于在内存池处理模块301初始化内存池后,根据内存池设置内存节点;
内存分配模块303,用于当本地的任一应用程序功能需要使用内存时,为应用程序功能分配一个内存等于应用程序功能所需要内存的空闲内存节点。
进一步地,内存分配模块303具体包括:
查询单元,用于当本地的任一应用程序功能需要使用内存时,查询内存节点链表;
判断单元,用于当查询单元查询内存节点链表时,判断是否能够查询到一个内存大于等于应用程序功能所需要内存的第一空闲内存节点;
分配单元,用于当判断单元判断能够查询到一个内存大于等于应用程序功能所需要内存的第一空闲内存节点时,对第一空闲内存节点进行分裂,得到一个内存等于该应用程序功能所需要内存的第二空闲内存节点,将第二空闲内存节点分配给应用程序功能。
进一步地,分配单元具体包括:
删除子单元,用于当判断单元判断能够查询到一个内存大于等于应用程序功能所需要内存的第一空闲内存节点时,将第一空闲内存节点从内存节点链表中删除;
分裂子单元,用于当删除子单元将第一空闲内存节点从内存节点链表中删除后,将第一空闲内存节点分裂为一个内存等于该应用程序功能所需要内存的第二空闲内存节点,以及一个内存等于第一空闲内存节点的内存与第二空闲内存节点的内存之差的第三空闲内存节点;
分配子单元,用于在分裂子单元将第一空闲内存节点分裂为第二空闲内存节点和第三空闲内存节点后,将第二空闲内存节点的内存节点状态设置为使用状态,然后分配给应用程序功能,将所述第三空闲内存节点插入到内存节点链表中,对内存池的属性进行更改。
进一步地,参见图4,该装置还包括:
内存释放模块304,用于当本地的任一应用程序功能需要释放内存时,获取应用程序功能所使用的内存节点的物理位置,将应用程序功能所使用的内存节点的内存节点状态修改为空闲状态,并修改内存池的属性;
第一判断模块305,用于当内存释放模块304修改内存池的属性后,判断应用程序功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点;
第一内存节点处理模块306,用于当第一判断模块305判断应用程序功能所使用的内存节点的物理相邻的内存节点中没有空闲内存节点时,将应用程序功能所使用的内存节点插到内存节点链表中。
进一步地,参见图5,该装置还包括:
内存节点合并模块307,用于当第一判断模块305判断应用程序功能所使用的内存节点的物理相邻的内存节点中有空闲内存节点时,将应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点;
第二判断模块308,用于当内存节点合并模块307将应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点后,判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点;
第二内存节点处理模块309,用于当第二判断模块308判断合并得到的内存节点的物理相邻的内存节点中没有空闲内存节点时,将合并得到的内存节点插到内存节点链表中。
进一步地,参见图6,该装置还包括:
通知模块310,用于当第二判断模块308判断合并得到的内存节点的物理相邻的内存节点中有空闲内存节点时,将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后通知第二判断模块308执行判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点的步骤。
进一步地,参见图7,该装置还包括:
内存池释放模块311,用于当本地退出时,根据内存池的属性打印出所有内存节点的使用情况以及内存非法操作记录,调用平台的内存应用程序编程接口API释放掉内存池。
本发明实施例所述的内存管理的装置,通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,实现本地自己对内存进行管理,从而方便在不同平台之间进行移植。通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,便于对内存的使用情况进行跟踪,避免内存使用越界的情况。根据内存池的属性打印出的所有内存节点的使用情况以及内存非法操作记录,可以查找出移动终端浏览器应用程序哪些地方使用内存非法、哪些地方造成内存泄露,从而可以进行相应的更改避免使用内存非法和内存泄露。并且当本地程序代码逻辑出问题时,根据内存池的属性打印出的所有内存节点的使用情况以及内存非法操作记录中会记录逻辑出问题的位置,从而可以进行相应的修改避免死机。另外,当引用内存的时候,可以加上检查,如果检查到引用位置非法可以提示用户出现严重问题,请将相关信息反馈给开发商。
以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如:计算机中的硬盘、光盘或软盘。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种内存管理的方法,其特征在于,所述方法包括:
通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并将内存池结构体包括的各个内存池属性赋给所述内存池结构体,所述内存池结构体用于描述所述内存池的属性,且所述内存池结构体包括的各个内存池属性为内存池首地址、内存池大小、内存池使用字节数、内存池空闲字节数、内存节点链表表头、用于调试的内存分配次数、内存释放次数、内存分配次数、最大内存节点个数、当前内存节点个数、内存分配的文件名和行数;
将整个内存池作为一个内存节点,设置所述内存节点的内存节点状态为空闲,所述内存节点的属性采用内存节点结构体来描述,所述内存节点结构体包括的内存节点属性为内存节点状态、内存节点长度、分配内存节点所在的应用程序文件名以及所在文件的行号、内存节点存在时间和指向所述内存节点的两个指针,所述两个指针的指针域还用于填充用户数据;
当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点;
其中,所述方法还包括:
当本地退出时,根据所述内存池的属性打印出所有内存节点的使用情况以及内存非法操作记录,调用平台的内存应用程序编程接口API释放掉所述内存池。
2.根据权利要求1所述的内存管理的方法,其特征在于,当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点,具体包括:
当本地的任一应用程序功能需要使用内存时,查询内存节点链表;
判断是否能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点;
如果能够,则对所述第一空闲内存节点进行分裂,得到一个内存等于所述应用程序功能所需要内存的第二空闲内存节点,将所述第二空闲内存节点分配给所述应用程序功能。
3.根据权利要求2所述的内存管理的方法,其特征在于,对所述第一空闲内存节点进行分裂,得到一个内存等于该应用程序功能所需要内存的第二空闲内存节点,将第二空闲内存节点分配给该应用程序功能,具体包括:
将所述第一空闲内存节点从内存节点链表中删除;
将所述第一空闲内存节点分裂为一个内存等于该应用程序功能所需要内存的第二空闲内存节点,以及一个内存等于所述第一空闲内存节点的内存与所述第二空闲内存节点的内存之差的第三空闲内存节点;
将所述第二空闲内存节点的内存节点状态设置为使用状态,然后分配给所述应用程序功能,将所述第三空闲内存节点插入到内存节点链表中,对所述内存池的属性进行更改。
4.根据权利要求1所述的内存管理的方法,其特征在于,所述方法还包括:
当本地的任一应用程序功能需要释放内存时,获取所述应用程序功能所使用的内存节点的物理位置,将所述应用程序功能所使用的内存节点的内存节点状态修改为空闲状态,并修改内存池的属性;
判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点;
如果没有,则将所述应用程序功能所使用的内存节点插到内存节点链表中。
5.根据权利要求4所述的内存管理的方法,其特征在于,所述方法还包括:
当判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中有空闲内存节点时,将所述应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点;
判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点;
如果没有,则将合并得到的内存节点插到内存节点链表中。
6.根据权利要求5所述的内存管理的方法,其特征在于,所述方法还包括:
当判断合并得到的内存节点的物理相邻的内存节点中有空闲内存节点时,将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后执行所述判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点的步骤。
7.一种内存管理的装置,其特征在于,所述装置包括:
内存池处理模块,用于通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并将内存池结构体包括的各个内存池属性赋给所述内存池结构体,所述内存池结构体用于描述所述内存池的属性,且所述内存池结构体包括的各个内存池属性为内存池首地址、内存池大小、内存池使用字节数、内存池空闲字节数、内存节点链表表头、用于调试的内存分配次数、内存释放次数、内存分配次数、最大内存节点个数、当前内存节点个数、内存分配的文件名和行数;
内存节点设置模块,用于在所述内存池处理模块初始化所述内存池后,将整个内存池作为一个内存节点,设置所述内存节点的内存节点状态为空闲,所述内存节点的属性采用内存节点结构体来描述,所述内存节点结构体包括的内存节点属性为内存节点状态、内存节点长度、分配内存节点所在的应用程序文件名以及所在文件的行号、内存节点存在时间和指向所述内存节点的两个指针,所述两个指针的指针域还用于填充用户数据;
内存分配模块,用于当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点;
其中,所述装置还包括:
内存池释放模块,用于当本地退出时,根据所述内存池的属性打印出所有内存节点的使用情况以及内存非法操作记录,调用平台的内存应用程序编程接口API释放掉所述内存池。
8.根据权利要求7所述的内存管理的装置,其特征在于,所述内存分配模块具体包括:
查询单元,用于当本地的任一应用程序功能需要使用内存时,查询内存节点链表;
判断单元,用于当所述查询单元查询内存节点链表时,判断是否能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点;
分配单元,用于当所述判断单元判断能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点时,对所述第一空闲内存节点进行分裂,得到一个内存等于所述应用程序功能所需要内存的第二空闲内存节点,将所述第二空闲内存节点分配给所述应用程序功能。
9.根据权利要求8所述的内存管理的装置,其特征在于,所述分配单元具体包括:
删除子单元,用于当所述判断单元判断能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点时,将所述第一空闲内存节点从内存节点链表中删除;
分裂子单元,用于当所述删除子单元将所述第一空闲内存节点从内存节点链表中删除后,将所述第一空闲内存节点分裂为一个内存等于该应用程序功能所需要内存的第二空闲内存节点,以及一个内存等于所述第一空闲内存节点的内存与所述第二空闲内存节点的内存之差的第三空闲内存节点;
分配子单元,用于在所述分裂子单元将所述第一空闲内存节点分裂为第二空闲内存节点和第三空闲内存节点后,将所述第二空闲内存节点的内存节点状态设置为使用状态,然后分配给所述应用程序功能,将所述第三空闲内存节点插入到内存节点链表中,对所述内存池的属性进行更改。
10.根据权利要求7所述的内存管理的装置,其特征在于,所述装置还包括:
内存释放模块,用于当本地的任一应用程序功能需要释放内存时,获取所述应用程序功能所使用的内存节点的物理位置,将所述应用程序功能所使用的内存节点的内存节点状态修改为空闲状态,并修改内存池的属性;
第一判断模块,用于当所述内存释放模块修改内存池的属性后,判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点;
第一内存节点处理模块,用于当所述第一判断模块判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中没有空闲内存节点时,将所述应用程序功能所使用的内存节点插到内存节点链表中。
11.根据权利要求10所述的内存管理的装置,其特征在于,所述装置还包括:
内存节点合并模块,用于当所述第一判断模块判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中有空闲内存节点时,将所述应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点;
第二判断模块,用于当所述内存节点合并模块将所述应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点后,判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点;
第二内存节点处理模块,用于当所述第二判断模块判断合并得到的内存节点的物理相邻的内存节点中没有空闲内存节点时,将合并得到的内存节点插到内存节点链表中。
12.根据权利要求11所述的内存管理的装置,其特征在于,所述装置还包括:
通知模块,用于当所述第二判断模块判断合并得到的内存节点的物理相邻的内存节点中有空闲内存节点时,将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后通知所述第二判断模块执行所述判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110104991.4A CN102760080B (zh) | 2011-04-26 | 2011-04-26 | 一种内存管理的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110104991.4A CN102760080B (zh) | 2011-04-26 | 2011-04-26 | 一种内存管理的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102760080A CN102760080A (zh) | 2012-10-31 |
CN102760080B true CN102760080B (zh) | 2016-08-03 |
Family
ID=47054545
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110104991.4A Active CN102760080B (zh) | 2011-04-26 | 2011-04-26 | 一种内存管理的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102760080B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870259A (zh) * | 2012-12-14 | 2014-06-18 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
CN103218307B (zh) * | 2013-04-18 | 2016-03-30 | 海信集团有限公司 | 内存管理系统和内存管理方法 |
US20140351530A1 (en) * | 2013-05-22 | 2014-11-27 | International Business Machines Corporation | Linked list for lock-free memory allocation |
CN105988823B (zh) * | 2015-01-27 | 2019-10-22 | 阿里巴巴集团控股有限公司 | 终端中应用启动时的内存分配方法及其系统 |
CN105988876B (zh) * | 2015-03-27 | 2019-09-17 | 杭州迪普科技股份有限公司 | 内存分配方法及装置 |
CN106155917A (zh) * | 2015-04-28 | 2016-11-23 | 北京信威通信技术股份有限公司 | 内存管理方法及装置 |
CN104965795B (zh) * | 2015-06-16 | 2018-02-27 | 重庆邮电大学 | 嵌入式系统静态内存池的分配方法 |
CN106294731B (zh) * | 2016-08-09 | 2019-05-28 | 四川网达科技有限公司 | 入库数据的管理方法及装置 |
CN106648943A (zh) * | 2016-09-22 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种Smart Rack系统性能测试内存优化的方法 |
CN106502783A (zh) * | 2016-09-23 | 2017-03-15 | 深圳市金立通信设备有限公司 | 一种内存管理方法及终端设备 |
CN106844046B (zh) * | 2016-12-31 | 2021-06-11 | 北京市腾河智慧能源科技有限公司 | 宽带载波内存管理方法 |
CN107168890B (zh) * | 2017-04-01 | 2021-03-19 | 杭州联吉技术有限公司 | 一种内存池的管理方法和装置 |
CN110555890B (zh) * | 2018-05-30 | 2023-10-20 | 珠海全志科技股份有限公司 | 一种内存管理方法及系统 |
CN109101438B (zh) * | 2018-07-25 | 2020-07-28 | 百度在线网络技术(北京)有限公司 | 用于存储数据的方法和装置 |
CN109710408B (zh) * | 2018-12-24 | 2020-08-04 | 杭州迪普科技股份有限公司 | 内存管理方法和装置 |
CN113010457B (zh) * | 2021-03-24 | 2024-07-05 | 北京百度网讯科技有限公司 | 资源管理方法、装置及移动终端 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1427342A (zh) * | 2001-12-21 | 2003-07-02 | 上海贝尔有限公司 | 一种内存管理系统及其分配方法 |
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
CN101630992A (zh) * | 2008-07-14 | 2010-01-20 | 中兴通讯股份有限公司 | 共享内存管理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101221536B (zh) * | 2008-01-25 | 2010-06-16 | 中兴通讯股份有限公司 | 嵌入式系统的内存管理方法及装置 |
-
2011
- 2011-04-26 CN CN201110104991.4A patent/CN102760080B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1427342A (zh) * | 2001-12-21 | 2003-07-02 | 上海贝尔有限公司 | 一种内存管理系统及其分配方法 |
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
CN101630992A (zh) * | 2008-07-14 | 2010-01-20 | 中兴通讯股份有限公司 | 共享内存管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102760080A (zh) | 2012-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102760080B (zh) | 一种内存管理的方法和装置 | |
CN104391725A (zh) | 页面展示方法和页面展示装置 | |
WO2021008425A1 (zh) | 一种系统启动方法以及相关设备 | |
CN101183363A (zh) | 一种利用系统表结构统一配置管理内存数据库的方法 | |
CN105357204A (zh) | 生成终端识别信息的方法及装置 | |
CN109710396A (zh) | 一种信息采集及内存释放的方法及装置 | |
CN113504918A (zh) | 设备树配置优化方法、装置、计算机设备和存储介质 | |
CN109597707A (zh) | 克隆卷数据拷贝方法、装置及计算机可读存储介质 | |
CN113377458B (zh) | 插件管理方法、装置、电子设备和存储介质 | |
CN115964002A (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN106341497A (zh) | 数字id生成方法及装置 | |
US9936015B2 (en) | Method for building up a content management system | |
CN109165712A (zh) | 分布式分期号的生成方法、装置和计算机存储介质 | |
CN113296854A (zh) | 一种数据加载方法、系统、电子设备及存储介质 | |
CN112114871A (zh) | 一种代码共享方法、装置、服务器、终端及介质 | |
CN104378393A (zh) | 一种资源分享方法和相应的装置 | |
CN106202456A (zh) | 发送图片的方法及装置 | |
CN100464300C (zh) | 基于arm的二进制执行环境平台及利用它的加载方法 | |
CN114003293B (zh) | 接口管理方法、装置、电子设备以及可读存储介质 | |
CN105677347A (zh) | 一种数据处理的方法及装置 | |
CN106528196B (zh) | 智能设备的app加载方法及应用该方法的智能设备、系统 | |
CN109388459A (zh) | 图片加载方法、装置、计算机设备及存储介质 | |
CN111399832B (zh) | 一种页面编辑方法及装置 | |
JP5972455B2 (ja) | 情報を削除する方法 | |
CN107402749A (zh) | 实现图片加载库的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |