Linux内核空间的内存申请常用函数

在Linux内核编程中内存的申请不同于系统编程,她有自己的一套机制。

1. kmalloc

函数原型:void *kmalloc( size_t size, int flags )

参数说明:size   ---  要分配的内存块大小

                    flags ---  分配标志,常用的有GFP_KERNEL(会引起睡眠),GFP_ATOMIC(不引起睡眠,分配不到,立即返回)

函数特点:申请的内存位于内核物理内存映射区域,物理上连续,与真实的物理地址只有一个固定偏移值,通过不同的分配标志可控制分配动作。

底层依赖:__get_free_page()

释放函数:free_page(),free_pages()


2.__get_free_page()

函数原型:__get_free_page(unsigned int flags)

参数说明: flags ---  分配标志,常用的有GFP_KERNEL(会引起睡眠),GFP_ATOMIC(不引起睡眠,分配不到,立即返回)

函数特点:用于获取一个空闲的新页,该函数实际是个宏,定义为__get_free_pages( (gfp_mask),0 )。该函数还有一系列类似的函数可使用。

底层依赖:__get_free_pages()

释放函数:kfree()


3. vmalloc()

函数原型:void *vmalloc( unsigned long size );

参数说明:size   ---  要分配的内存块大小

函数特点:用于分配大块的内存,开销很大,需建立新的页表。

底层依赖:kmalloc

释放函数:vfree()







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值