kmalloc和malloc类似,可被阻塞,分配的内存保持原有数据,分配的区域在物理内存中也是连续的。
头文件:
<linux/slab.h>
函数原型:
void *kmalloc(size_t size, int flags);
size:分配的块的大小,flags:分配标志
标志:
定义在<linux/gfp.h>
GFP_KERNEL(常用)
最常用的标志,内核内存的通常分配方法,可能引起休眠。允许kmalloc在空闲内存较少时把当前进程转入休眠以等待一个页面,使用GFP_KERNEL分配内存的函数必须是可重入的。
GFP_ATOMIC(常用)
原子性地分配一些空闲内存页,用于在中断处理例程或其它运行于进程上下文外的代码中分配内存,不会休眠。
其它的一些标志:
GFP_USER,用于为用户空间分配内存,可能引起休眠
GFP_HIGHUSER,有高端内存的话就从高端内存分配
GFP_NOIO,禁止任何IO的初始化
GFP_NOFS,不允许执行任何文件系统的调用
下面的标志可以和上面的标志或( | )起来使用,控制如何进行分配:
__GFP_DMA,分配发生在可进行DMA你内存段中
__GFP_HIGHMEM,分配的内存可位于高端内存
__GFP_COLD,内存分配器试图返回处理器缓存中的内存页
__GFP_NOWARN,避免内核在分配内存失败时产生警告
__GFP_HIGH,高优先级请求
__GFP_REPEAT,重新尝试分配
__GFP_NOFALL,始终不返回失败
__GFP_NORETRY,请求内存不成功,立即返回
内存区段:
linux内核把内存分为三个区段:可用于

本文详细介绍了kmalloc函数,它是Linux内核中的内存分配器,类似于malloc,但具备更多特性,如可阻塞分配、分配标志控制等。kmalloc适用于内核空间的内存管理,支持不同标志以适应多种场景。
最低0.47元/天 解锁文章
117

被折叠的 条评论
为什么被折叠?



