Linux内核申请磁盘空间,Linux内核下内存空间的申请

本文介绍了Linux内核中申请内存的三个关键函数:kmalloc()、kzalloc()和kcalloc()。kmalloc()是最常用的内存申请函数,支持GFP_KERNEL和GFP_ATOMIC两种模式。kzalloc()在kmalloc基础上自动清零内存,而kcalloc()则为数组分配内存并自动清零。内存释放统一使用kfree()函数。
摘要由CSDN通过智能技术生成

2020-05-23

关键字:kmalloc、kzalloc、kcalloc

1、kmalloc()

kmalloc() 是Linux内核开发中最常使用的申请内存的函数。它的原型如下所示:

#include

void *kmalloc(size_t size, int flags);

函数的返回值通常就指向所申请到的内存空间的起始地址。当然,有时它也会指向 NULL--如果内存的申请出于某些原因失败的话。

参数 1 表示要申请的空间大小,单位是字节。size_t 其实就是个 unsigned int 的别名。

参数 2 表示申请内存时的模式。这个模式有很多个可选类型,它们均声明于 中。虽然在 gfp.h 中有众多可选类型,但其实最常用的也就两个值:

1、GFP_KERNEL

这个标志表示当内核中的可用内存不足时,调用者,即发起当前申请请求的进程将会被强制进入休眠状态以等待有足够的内存可供申请为止。也正因为这个标志有可能导致调用进程的休眠,这个标志只被允许在“进程上下文”中使用。“中断上下文”如果要休眠的话是会引发错误的。

2、GFP_ATOMIC

内核会额外地将一部分内存划分出来以专供于原子性的空间申请使用。简单来说,使用这个标志就是有内存时就给你分配,没有就直接以失败告终,它不会让你的进程进入休眠态的。

需要注意的是:以上的头文件贴出的仅仅是标准Linux内核中的声明。不同版本、用途的Linux内核可能会有不同的声明结构,这些需要各位同学自行确认。

以下是一个使用 kmalloc() 函数申请内存的小实例:

structPerson{char *name;intage;

};int__ini

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值