一种内存管理方法及装置的制造方法_3

文档序号:9235348阅读:来源:国知局
用模块用户占用的记录信息,具体包括:针对为该应用模块用户分配的每一内存块:在预设的内存管理链表中存储应用模块用户标识与该内存块属性信息之间的对应关系,其中,内存管理链表中的表项与内存块一一对应,用于记录每一内存块被应用模块用户占用的记录信息,内存块属性信息包括内存块的标识和地址信息。
[0041]具体实施时,预设的内存管理链表中包括一个表项,该表项与内存块一一对应,用于记录每一内存块被应用模块用户占用的记录信息,也即存储应用模块用户标识与该内存块属性信息之间的对应关系,值得说明的是,应用模块用户标识可以在应用模块用户接入时获取,应用模块用户标识可以是应用模块用户的序列号、手机号码或者接入时生成的序号等等,内存块的属性信息包括内存块标识和地址信息,当为应用模块用户分配内存块时,可以获取内存块标识和地址信息,该内存块标识可以是对内存块的编号,该地址信息可以是内存块的指针信息。
[0042]在一种可能的实施方式中,本发明实施例提供的方法中,内存管理链表中包括忙链表和闲链表,当为应用模块用户分配一内存块时,从闲链表中获取一表项存储该内存块被该应用模块用户占用的记录信息,并添加到忙链表中。
[0043]下面结合图2A-图2F对本发明实施例的内存管理链表的工作原理进行详细说明,具体来说:
[0044]如图2A所不,作为较为具体的实施例,内存管理链表包括5个表项,分别为:表项
1、表项2、表项3、表项4、表项5,首先初始化内存管理链表,也即图2A中所示的5个表项均为闲链表。
[0045]如图2B所不,当为应用模块用户分配第一块内存块时,贝Ij从闲链表中获取一表项(图2B中的表项I)存储该内存块被该应用模块用户占用的记录信息,并添加到忙链表中。
[0046]如图2C所示,当为应用模块用户分配第二块内存块时,则从闲链表中获取一表项(图2C中的表项2)存储该内存块被该应用模块用户占用的记录信息,并添加到忙链表中。
[0047]如图2D所示,当为应用模块用户分配第三块内存块时,则从闲链表中获取一表项(图2D中的表项3)存储该内存块被该应用模块用户占用的记录信息,并添加到忙链表中。
[0048]如图2E所示,当确定需要释放为该应用模块用户分配的第二块内存块时,释放该内存块,并且删除表项2中存储的该内存块被该应用模块用户占用的记录信息。
[0049]如图2F所示,当删除表项2中存储的该第二块内存块被该应用模块用户占用的记录信息之后,作为较为优选的实施例,将表项2移动至闲链表的末尾,也即表项5的后面。
[0050]在一种可能的实施方式中,本发明实施例提供的方法中,在从闲链表中获取一表项存储该内存块被该应用模块用户占用的记录信息之后,该方法还包括:在预先存储的内存关系表中存储表项标识与内存块标识之间的对应关系;当确定需要释放为应用模块用户分配的任一内存块时,释放该内存块,并且删除该内存块被该应用模块用户占用的记录信息,具体包括:当确定需要释放为应用模块用户分配的任一内存块时,释放该内存块,并根据内存关系表以及该内存块标识,确定该内存块标识对应的表项,删除该表项中存储的该内存块被该应用模块用户占用的记录信息;然后,将该表项添加到闲链表中。
[0051]具体实施时,在从闲链表中获取一表项存储该内存块被该应用模块用户占用的记录信息之后,在预先存储的内存关系表中存储表项标识与内存块标识之间的对应关系,则在确定需要释放任一内存块时,释放该内存块,并根据该内存块标识与内存关系表查找确定该内存块标识对应的表项,删除该内存块被该应用模块用户占用的记录信息,也即删除该表项中存储的应用模块用户标识与内存块属性信息之间的对应关系。
[0052]当然,本领域技术人员应当理解的是,在确定需要释放任一内存块时,释放该内存块,并且删除该内存块被该应用模块用户占用的记录信息,其中,删除该内存块被该应用模块用户占用的记录信息的方法还有很多,例如:以内存块的地址信息为索引,在内存管理链表中进行查找,确定记录该内存块地址信息的表项,删除该表项中存储的应用模块用户标识与内存块属性信息之间的对应关系,也即删除该内存块被该应用模块用户占用的记录信息。
[0053]在一种可能的实施方式中,本发明实施例提供的方法中,通过如下方式确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息:当内存管理链表的忙链表中存在应用模块用户标识与内存块属性信息之间的对应关系时,确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息。
[0054]具体实施时,由于内存管理链表的忙链表中的表项存储应用模块用户标识与内存块属性信息之间的对应关系,因此,当内存管理链表的忙链表中存在应用模块用户标识与内存块属性信息之间的对应关系时,则确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息,也即该应用模块用户占用的内存块未完全释放,存在内存泄露。
[0055]在一种可能的实施方式中,本发明实施例提供的方法中,忙链表的每一表项中还记录有应用模块用户申请的内存块所处理的业务信息;确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息之后,该方法还包括:将记录有该记录信息的表项中记录的应用模块用户申请的内存块所处理的业务信息进行转存。
[0056]本发明实施例提供的方法中,在忙链表的每一表项中记录应用模块用户申请的内存块所处理的业务信息,当需要释放应用模块用户时,若忙链表中任一表项中仍然存储有该应用模块用户对应的内存块被该应用模块用户占用的记录信息,则该应用模块用户占用的内存块存在内存泄露,则将该记录有记录信息的表项中记录的应用模块用户申请的内存块所处理的业务信息进行转存,例如:存储到预先设置的存储器中,便于后续内存泄露定位。其中,值得说明的是,本发明实施例中的业务信息包括业务的文件位置,例如:文件名和行号。
[0057]具体实施时,若预先设置多个内存管理链表,则通过在内存管理链表的忙链表中查找是否存在应用模块用户标识与内存块属性信息之间的对应关系,确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息时,需要在预先设置的多个内存管理链表中逐一查找,需要消耗较多的资源,作为较为优选的实施例,在一种可能的实施方式中,本发明实施例提供的方法中,预先设置多个内存管理链表,并且,该方法还包括:当接入多个应用模块用户时,对所述多个应用模块用户进行分组,得到多个应用模块用户组,建立所述应用模块用户组与内存管理链表之间的映射关系;通过如下方式确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息:确定该应用模块用户所在的应用模块用户组,并根据所述映射关系,确定所述应用模块用户对应的内存管理链表,当确定该内存管理链表的忙链表中存在所述应用模块用户标识与内存块属性信息之间的对应关系时,确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息。
[0058]本发明实施例提供的方法中,当预先设置多个内存管理链表,并且接入的应用模块用户为多个时,对多个应用模块用户进行分组,得到多个应用模块用户组,建立应用模块用户组与内存管理链表之间的映射关系,则可以通过如下方式确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息:确定该应用模块用户所在的应用模块用户组,并根据映射关系,确定应用模块用户对应的内存管理链表,当确定该内存管理链表的忙链表中存在应用模块用户标识与内存块属性信息之间的对应关系时,确定还存在该应用模块用户对应的内存块被该应用模块用户占用的记录信息,确定应用模块用户所在的应用模块用户组,并根据映射关系确定该应用模块用户组对应的内存管理链表,在该内存管理链表中的忙链表中查找是否存在应用模块用户标识与内存块属性信息之间的对应关系,从而避免在预先设置的多个内存管理链表中查找是否存在应用模块用户标识与内存块属性信息之间的对应关系,缩小内存泄露的检测范围,提高内存泄露的检测效率。
[0059]当然,本领域技术人员应当理解的是,对多个应用模块用户进行分组,得到多个应用模块用户组的方法有很多,例如:应用模块用户标识模值相同、应用模块用户标识对同一数值求余的余数相同等等,而在本发明的其它实施例中,也可以不对应用模块用户进行分组,直接建立应用模块用户与内存管理链表之间的映射关系。
[0060]作为较为具体的实施例,假设有100个应用模块用户,编号为O?99,也即应用模块用户标识为O?99,10个内存管理链表,编号为O?9,则可以根据应用模块用户标识将应用模块用户分为10个应用模块用户组,例如:采用应用模块用户标识对分组个数取模,模值一样的分在同一应用模块用户组中,则应用模块用户O?9为应用模块用户组0、应用模块用户10?19为应用模块用户组1、依次类推,应用模块用户90?99为应用模块用户组9,然后,建立应用模块用户组与内存管理链表之间的映射关系,本实施例在应用模块用户组和内存管理链表之
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1