内存分配

kmalloc:它和malloc相似,除非被阻塞,否则这个函数勊运行得很快,而且不对所获取的空间清零,也就是说,分配给它的区域仍然保持着原有的数据。它分配的区域在物理内存中也是连续的。

void *kmalloc(size_t size, int flags) : 第一个参数是要分配的快的大小,第二个参数是分配标志,分配标志可以控制kmalloc的行为。

 

关于size参数: Linux处理内存分配的方法是,创建一系列的内存对象池,每个池中的内存块大小是固定一致的。处理分配请求时,就直接在包含足够大的内存块的池中传递一个整块给请求者。驱动程序开发人员应该记住的一点是,内和只能分配一些预定义的、固定大小的字节数组。如果申请任意数量的内存,那么得到的很可能会多一些,最多会到申请数量的两倍。另外,我们应该记住的是,kmalloc能处理的最小的内存块是32或64,到底是哪个则取决于当前体系结构使用的页面大小。  对kmalloc能够分配的内存块大小,存在一个上限,这个限制随着体系架构的不同以及内核配置选项的不同而变化。如果我们希望代码具有完整的可移植性,则不应该分配大于128KB的内存。  如果我们希望得到多于几千字节的内存,则最好使用除kmalloc之外的内存获取方法。

 

 

vmalloc: 它分配虚拟地址空间的连续区域。尽管这段区域在物理上可能是不连续的,内核却认为它们在地址上是连续的。vmalloc在发生错误时返回0,成功时返回一个指针,该指针指向一个线性的、大小最少为size的线性内存区域。

 

kmalloc和__get_free_pages使用的(虚拟)地址范围与物理内存是一一对应的,可能会有基于常量PAGE_OFFSET的一个偏移。这两个函数不需要为该地址段修改页表。但另一方面,vmalloc和ioremap使用的地址范围完全是虚拟的,每次分配都要通过对页表的适当设置来建立(虚拟)内存区域。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值