[发明专利]一种适用于SLAB的内存分配方法及装置在审
申请号: | 201410707583.1 | 申请日: | 2014-11-28 |
公开(公告)号: | CN104317734A | 公开(公告)日: | 2015-01-28 |
发明(设计)人: | 范恒英 | 申请(专利权)人: | 迈普通信技术股份有限公司 |
主分类号: | G06F12/06 | 分类号: | G06F12/06 |
代理公司: | 北京中博世达专利商标代理有限公司 11274 | 代理人: | 申健 |
地址: | 610041 四川省*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 适用于 slab 内存 分配 方法 装置 | ||
技术领域
本发明涉及计算机技术领域,尤其涉及一种适用于SLAB的内存分配方法及装置。
背景技术
SLAB是一种在LINUX和类UNIX操作系统内核中广泛使用的内存管理机制,该机制创建一系列SLAB内存池,将从底层内存管理机制分出的大块内存划分为特定大小的内存块放入SLAB内存池中,上层用户请求分配内存时直接从SLAB内存池中分配,上层用户释放内存时将内存释放回SLAB内存池,并通过与该SLAB内存池对应的SLAB控制块以链表方式对SLAB内存池中的每个内存块进行管理。
其中,LINUX内核中的SLAB内存管理机制还可以记录内存块的使用者信息(如使用者调用内存分配接口函数或内存释放接口函数时的指令地址或者调用堆栈信息),以便于使用者利用内存块的使用者信息分析定位内存泄露、越界写、内存未初始化就使用、内存释放后继续使用等内存使用的相关问题(bug)。例如,图1为现有SLAB内存的结构图。如图1所示,包含内存块数组以及控制该内存块数组的SLAB控制块,其中,内存块数组为一段连续的物理内存区域,包含多个内存大小相等的内存块,以及,与内存块相邻的内存块的使用者信息的记录区域,SLAB控制块包含指向内存块数组起始地址的内存块数组指针以及内存块对应的控制信息,其中,控制信息包含内存块的状态信息(如已分配、空闲)。
由于现有SLAB内存管理机制中记录内存块的使用者信息的区域与内存块区域相邻接,当使用者发生内存越界写时,内存块的使用者信息记录通常会被改写,导致记录的信息无效,使得定位内存bug困难。例如,如图1所示,假设用户分配了内存块1,且内存块1的大小为32字节,此时,用户若向内存块1中写入36字节的数据,则会使得多出的4字节数据写入内存块1的使用者信息的区域,使得内存块的使用者信息的记录被改写。
发明内容
本发明的实施例提供一种适用于SLAB的内存分配方法及装置,以解决现有SLAB内存管理机制中,在使用者越界写的情况下,内存块的使用者信息记录被改写的问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明实施例提供一种适用于SLAB的内存分配方法,包括:
获取一连续的第一内存区域;
将所述第一内存区域划分为多个连续的大小相同的内存块;
获取一连续的第二内存区域;
在所述第二内存区域设置与所述内存块对应的控制块,其中,所述控制块包含:指向所述第一内存区域起始地址的内存块数组指针、所有所述内存块的控制信息组成的控制信息数组、所有所述内存块的使用者信息组成的使用者信息数组。
第二方面,本发明实施例提供一种适用于SLAB的内存分配装置,包括:
获取单元,用于获取一连续的第一内存区域;
划分单元,用于将所述第一内存区域划分为多个连续的大小相同的内存块;
所述获取单元,还用于获取一连续的第二内存区域;
配置单元,用于在所述第二内存区域设置与所述内存块对应的控制块,其中,所述控制块包含:指向所述第一内存区域起始地址的内存块数组指针、所有所述内存块的控制信息组成的控制信息数组、所有所述内存块的使用者信息组成的使用者信息数组。
由上可知,本发明实施例提供的SLAB内存分配方法及装置,与现有技术相比,通过将内存块的使用者信息配置在与内存块对应的控制块中,来实现将内存块区域与记录内存块的使用者信息的区域分离。因为本发明实施例中内存块的使用者信息与分配给用户使用的内存块不相邻,所以,当使用者越界写时,使用者信息不会被破坏,从而有效避免了现有SLAB内存管理机制中,使用者越界写的情况下,内存块的使用者信息记录被改写的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有SLAB内存的结构图;
图2为本发明实施例提供的一种适用于SLAB的内存分配方法的流程图;
图3为本发明实施例提供的SLAB内存的结构图;
图3A为本发明实施例提供的SLAB内存的结构图;
图4为本发明实施例提供的一种适用于SLAB的内存分配装置的结构图。
具体实施方式
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于迈普通信技术股份有限公司,未经迈普通信技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410707583.1/2.html,转载请声明来源钻瓜专利网。