slab源码分析--kmalloc函数分析

这次来说一个关键函数,kmalloc()函数。

函数原型

#include Linux/slab.h> 
void *kmalloc(size_t size, int flags); 

size是要分配内存的大小,不过内核会对大小进行适配,比如取32,64等等,是和缓存行等体系结构有关系的,总之可能会比你要申请的内存大一些。
flags是与伙伴系统交互的标记,虽说kmalloc()是从slab分配内存,不过底层还是要和伙伴系统交互的。

我们来看一下这些标记:

flags 含义
GFP_ATOMIC 用来从中断处理和进程上下文之外的其他代码中分配内存,从不睡眠
GFP_KERNEL 内核内存的正常分配,可能睡眠
GFP_USER 用来为用户空间页分配内存,可能睡眠
GFP_HIGHUSER 类似GPR_USER,但是是从高端内存分配。
GFP_NOIO 类似GFP_KERNEL,禁止任何文件系统调用
GFP_NOFD 类似GFP_KERNEL,禁止任何I/O初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值