一种内存管理的方法和装置的制作方法

文档序号:6423094阅读:134来源:国知局
专利名称:一种内存管理的方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及一种内存管理的方法和装置。
背景技术
随着计算机网络技术的发展,无线互联网技术也在迅速地发展,使得用户不但可以通过移动终端设备(例如手机等)随时随地地与他人通话,还可以通过移动终端设备上的各种类型的应用程序,例如即时通信软件、阅读器、移动终端浏览器、地图搜索等,实现其他各种功能。目前在移动终端设备上的应用程序运行过程中,直接使用移动终端设备的 平台(移动终端设备应用程序软件的运行环境)提供的不同内存API (ApplicationProgramming Interface,应用程序编程接口 )为该应用程序的不同功能分配或释放内存。然而,在实现本发明的过程中,发明人发现现有技术至少存在以下问题移动终端设备的特点是平台很多,不同平台提供的内存API有可能不同,当将适用于某平台的应用程序移植到其他平台时可能会无法正常运行,为应用程序的移植带来困难。

发明内容
为了解决现有技术的问题,本发明实施例提供了一种内存管理的方法和装置。所述技术方案如下一种内存管理的方法,所述方法包括通过平台的内存应用程序编程接口 API获取一预设大小的内存作为本地的内存池,并初始化所述内存池;根据所述内存池设置内存节点;当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。一种内存管理的装置,所述装置包括内存池处理模块,用于通过平台的内存应用程序编程接口 API获取一预设大小的内存作为本地的内存池,并初始化所述内存池;内存节点设置模块,用于在所述内存池处理模块初始化所述内存池后,根据所述内存池设置内存节点;内存分配模块,用于当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。本发明实施例提供的技术方案的有益效果是通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,实现本地自己对内存进行管理,从而方便在不同平台之间进行移植。


图I是本发明实施例I提供的一种内存管理的方法流程图;图2是本发明实施例2提供的一种内存管理的方法流程图;图3是本发明实施例3提供的第一种内存管理的装置结构示意图;图4是本发明实施例3提供的第二种内存管理的装置结构示意图;图5是本发明实施例3提供的第三种内存管理的装置结构示意图;图6是本发明实施例3提供的第四种内存管理的装置结构示意图;图7是本发明实施例3提供的第五种内存管理的装置结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例I参见图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 :移动终端浏览器应用程序查询内存节点链表,判断是否能够查询到一个内存大于等于该功能所需要内存的第一空闲内存节点(记作pNodel),如果能则执行205 ;否则,执行212。例如假设移动终端浏览器应用程序的任一功能需要使用一个32字节的内存,移动终端浏览器应用程序查询内存节点链表,得到一个字节数大于32字节的第一空闲内存节点,则执行205。并且,查询到第一空闲内存节点即可以得到第一空闲内存节点的首地址从而确定第一空闲内存节点的具体物理位置。
其中,移动终端浏览器应用程序的该功能所需要内存的大小为该功能所需要使用的用户数据占用的内存,加上内存节点结构体的大小,再加上内存节点尾部结构体的大小(用来存放内存节点的长度,一般为4个字节)。但是,如果内存节点的两个指针域也用于填充用户数据,则移动终端浏览器应用程序的该功能所需要内存的大小为该功能所需要使用的用户数据占用的内存,加上内存节点结构体的大小(去掉两个指针的大小),再加上内存节点尾部结构体的大小。205:移动终端浏览器应用程序对该第一空闲内存节点进行分裂,得到一个内存等于该功能所需要内存的第二空闲内存节点(记作pNode2),将第二空闲内存节点分配给移动终端浏览器应用程序的该功能,然后执行203。具体地,分裂的过程如下将第一空闲内存节点从内存节点链表中删除;按照第一空闲内存节点的内存的大小和移动终端浏览器应用程序的该功能所需要的内存的大小,将第一空闲内存节点分裂为一个内存的大小与移动终端浏览器应用程序的该功能所需要的内存的大小相等的第二空闲内存节点(记作pNode2),以及一个内存的大小为第一空闲内存节点的内存的大小与第二空闲内存节点的内存的大小之差的第三空闲内存节点(记作pNode3);将第二空闲内存节点的状态设置为使用状态,分配给移动终端浏览器应用程 序的该功能,将第三空闲内存节点插入到内存节点链表中;对内存池的属性进行更改,t匕如,最大内存节点个数、当前内存节点个数、内存分配次数、内存使用字节数、内存空闲字节数、内存分配的文件名和行数等。206:获取移动终端浏览器应用程序的该功能所使用的内存节点的物理位置,将该功能所使用的内存节点的内存节点状态修改为空闲状态,修改内存池的属性(比如内存释放次数等),判断该功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点,如果有,则执行207 ;否则,执行211。其中,获取移动终端浏览器应用程序的该功能所使用的内存节点的物理位置具体可以通过获取移动终端浏览器应用程序的该功能所使用的内存节点的内存地址的方法实现。207 :将该功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点。208 判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点,如果有,则执行209 ;否则,执行210。209 :将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后执行208。210 :将合并得到的内存节点插到内存节点链表中,然后执行203。211 :将该功能所使用的内存节点插到内存节点链表中,然后执行203。例如假设以204-205的方式为移动终端浏览器应用程序中的3个功能分别分配了一个内存节点(分别记作pNodel、pNode2、pNode3),相应的内存节点地址存在3个变量(分别记作pMeml、pMem2、pMem3)中,此时内存池中有4个内存节点,其中3个是使用状态,I个是空闲状态,其中,3个被分配内存节点依次物理相邻,I个空闲状态的内存节点在pNode3物理位置的右侧,假设要释放pNode2、pNode3,过程如下首先释放pNode2时,根据pMem2得到pNode2的首地址,将pNode2的内存节点状态修改为空闲状态,然后修改内存池的属性,比如内存节点空闲次数等。判断pNode2的物理相邻的内存节点中是否有空闲内存节点,此时pNode2的物理相邻的内存节点中没有空闲内存节点,所以将pNode2插到内存节点链表中。并且由于pNode2在空闲内存节点物理位置的左侧,所以将pNode2变成内存节点链表的表头。然后再释放pNode3时,根据pMem3得到pNode3的首地址,将pNode3的内存节点状态修改为空闲状态,然后修改内存池的属性,比如内存节点空闲次数等。判断pNode3的物理相邻的内存节点中是否有空闲内存节点,此时pNode3的物理相邻的内存节点中有空闲内存节点(pNode2),所以将pNode3和pNode2合并,pNode3和pNode2合并后的内存节点的物理相邻右节点也是一个空闲内存节点,所以再次进行合并,这样整个内存池变为两个内存节点,一个pNodel和一个合并得到的空闲内存节点。如果后续接着还要释放pNodel,则释放pNodel后,整个内存池又回到初始状态。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释放掉内存池。本发明实施例所述的内存管理的装置,通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,实现本地自己对内存进行管理,从而方便在不同平台之间进行移植。通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,便于对内存的使用情况进行跟踪,避免内存使用越界的情况。根据内存池的属性打印出的所有内 存节点的使用情况以及内存非法操作记录,可以查找出移动终端浏览器应用程序哪些地方使用内存非法、哪些地方造成内存泄露,从而可以进行相应的更改避免使用内存非法和内存泄露。并且当本地程序代码逻辑出问题时,根据内存池的属性打印出的所有内存节点的使用情况以及内存非法操作记录中会记录逻辑出问题的位置,从而可以进行相应的修改避免死机。另外,当引用内存的时候,可以加上检查,如果检查到引用位置非法可以提示用户出现严重问题,请将相关信息反馈给开发商。以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如计算机中的硬盘、光盘或软盘。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种内存管理的方法,其特征在于,所述方法包括 通过平台的内存应用程序编程接口 API获取一预设大小的内存作为本地的内存池,并初始化所述内存池; 根据所述内存池设置内存节点; 当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。
2.根据权利要求I所述的内存管理的方法,其特征在于,当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点,具体包括 当本地的任一应用程序功能需要使用内存时,查询内存节点链表; 判断是否能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点; 如果能够,则对所述第一空闲内存节点进行分裂,得到一个内存等于所述应用程序功能所需要内存的第二空闲内存节点,将所述第二空闲内存节点分配给所述应用程序功能。
3.根据权利要求2所述的内存管理的方法,其特征在于,对所述第一空闲内存节点进行分裂,得到一个内存等于该应用程序功能所需要内存的第二空闲内存节点,将第二空闲内存节点分配给该应用程序功能,具体包括 将所述第一空闲内存节点从内存节点链表中删除; 将所述第一空闲内存节点分裂为一个内存等于该应用程序功能所需要内存的第二空闲内存节点,以及一个内存等于所述第一空闲内存节点的内存与所述第二空闲内存节点的内存之差的第三空闲内存节点; 将所述第二空闲内存节点的内存节点状态设置为使用状态,然后分配给所述应用程序功能,将所述第三空闲内存节点插入到内存节点链表中,对所述内存池的属性进行更改。
4.根据权利要求I所述的内存管理的方法,其特征在于,所述方法还包括 当本地的任一应用程序功能需要释放内存时,获取所述应用程序功能所使用的内存节点的物理位置,将所述应用程序功能所使用的内存节点的内存节点状态修改为空闲状态,并修改内存池的属性; 判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点; 如果没有,则将所述应用程序功能所使用的内存节点插到内存节点链表中。
5.根据权利要求4所述的内存管理的方法,其特征在于,所述方法还包括 当判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中有空闲内存节点时,将所述应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点; 判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点; 如果没有,则将合并得到的内存节点插到内存节点链表中。
6.根据权利要求5所述的内存管理的方法,其特征在于,所述方法还包括 当判断合并得到的内存节点的物理相邻的内存节点中有空闲内存节点时,将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后执行所述判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点的步骤。
7.根据权利要求1-6中任意一项权利要求所述的内存管理的方法,其特征在于,所述方法还包括 当本地退出时,根据所述内存池的属性打印出所有内存节点的使用情况以及内存非法操作记录,调用平台的内存应用程序编程接口 API释放掉所述内存池。
8.—种内存管理的装置,其特征在于,所述装置包括 内存池处理模块,用于通过平台的内存应用程序编程接口 API获取一预设大小的内存作为本地的内存池,并初始化所述内存池; 内存节点设置模块,用于在所述内存池处理模块初始化所述内存池后,根据所述内存池设置内存节点; 内存分配模块,用于当本地的任一应用程序功能需要使用内存时,为所述应用程序功 能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。
9.根据权利要求8所述的内存管理的装置,其特征在于,所述内存分配模块具体包括 查询单元,用于当本地的任一应用程序功能需要使用内存时,查询内存节点链表; 判断单元,用于当所述查询单元查询内存节点链表时,判断是否能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点; 分配单元,用于当所述判断单元判断能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点时,对所述第一空闲内存节点进行分裂,得到一个内存等于所述应用程序功能所需要内存的第二空闲内存节点,将所述第二空闲内存节点分配给所述应用程序功能。
10.根据权利要求9所述的内存管理的装置,其特征在于,所述分配单元具体包括 删除子单元,用于当所述判断单元判断能够查询到一个内存大于等于所述应用程序功能所需要内存的第一空闲内存节点时,将所述第一空闲内存节点从内存节点链表中删除;分裂子单元,用于当所述删除子单元将所述第一空闲内存节点从内存节点链表中删除后,将所述第一空闲内存节点分裂为一个内存等于该应用程序功能所需要内存的第二空闲内存节点,以及一个内存等于所述第一空闲内存节点的内存与所述第二空闲内存节点的内存之差的第三空闲内存节点; 分配子单元,用于在所述分裂子单元将所述第一空闲内存节点分裂为第二空闲内存节点和第三空闲内存节点后,将所述第二空闲内存节点的内存节点状态设置为使用状态,然后分配给所述应用程序功能,将所述第三空闲内存节点插入到内存节点链表中,对所述内存池的属性进行更改。
11.根据权利要求8所述的内存管理的装置,其特征在于,所述装置还包括 内存释放模块,用于当本地的任一应用程序功能需要释放内存时,获取所述应用程序功能所使用的内存节点的物理位置,将所述应用程序功能所使用的内存节点的内存节点状态修改为空闲状态,并修改内存池的属性; 第一判断模块,用于当所述内存释放模块修改内存池的属性后,判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中是否有空闲内存节点; 第一内存节点处理模块,用于当所述第一判断模块判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中没有空闲内存节点时,将所述应用程序功能所使用的内存节点插到内存节点链表中。
12.根据权利要求11所述的内存管理的装置,其特征在于,所述装置还包括 内存节点合并模块,用于当所述第一判断模块判断所述应用程序功能所使用的内存节点的物理相邻的内存节点中有空闲内存节点时,将所述应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点; 第二判断模块,用于当所述内存节点合并模块将所述应用程序功能所使用的内存节点与其物理相邻的空闲内存节点合并为一个内存节点后,判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点; 第二内存节点处理模块,用于当所述第二判断模块判断合并得到的内存节点的物理相邻的内存节点中没有空闲内存节点时,将合并得到的内存节点插到内存节点链表中。
13.根据权利要求12所述的内存管理的装置,其特征在于,所述装置还包括 通知模块,用于当所述第二判断模块判断合并得到的内存节点的物理相邻的内存节点中有空闲内存节点时,将合并得到的内存节点与其物理相邻的空闲内存节点合并为一个内存节点,然后通知所述第二判断模块执行所述判断合并得到的内存节点的物理相邻的内存节点中是否有空闲内存节点的步骤。
14.根据权利要求8-13中任意一项权利要求所述的内存管理的装置,其特征在于,所述装置还包括 内存池释放模块,用于当本地退出时,根据所述内存池的属性打印出所有内存节点的使用情况以及内存非法操作记录,调用平台的内存应用程序编程接口 API释放掉所述内存池。
全文摘要
本发明公开了一种内存管理的方法和装置,属于计算机技术领域。所述方法包括通过平台的内存应用程序编程接口API获取一预设大小的内存作为本地的内存池,并初始化所述内存池;根据所述内存池设置内存节点;当本地的任一应用程序功能需要使用内存时,为所述应用程序功能分配一个内存等于所述应用程序功能所需要内存的空闲内存节点。所述装置包括内存池处理模块、内存节点设置模块和内存分配模块。本发明通过获取一预设大小的内存作为本地的内存池,并通过内存节点的方式为本地的不同应用程序功能分配或释放内存,实现本地自己对内存进行管理,从而方便在不同平台之间进行移植。
文档编号G06F9/50GK102760080SQ20111010499
公开日2012年10月31日 申请日期2011年4月26日 优先权日2011年4月26日
发明者采国魁 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1