[初级知识]linux内核开发中基本内存分配与申请

Linux内核开发中的内存申请常用API

  • Kmalloc()/Kfree()
  • Vmalloc()/Vfree()
  • Kzalloc()/Kfree()
  • ioremap()

这几个API在Linux内核/linux驱动初级开发中用的比较多,他们虽然都是内核中的内存申请函数API,却也用在不同的情况下,有着各自使用的场景。


1. Kmalloc()与 Kfree()

特点:

分配的内存,其物理地址连续

1. 1 Kmalloc

The function is declared in <linux/slab.h>:

void * kmalloc(size_t size, int flags)

举例:
struct dog *ptr;

ptr = kmalloc(sizeof(struct dog), GFP_KERNEL);
if (!ptr)
        /* handle error ... */

返回值:
    成功返回一个虚拟地址(实际返回的申请区域的Kmalloc_size>=你需要的request_size)
    失败返回NULL,所有需要检查返回值

1.2 Kfree()

The other end of kmalloc() is kfree(), which is declared in <linux/slab.h>:

void kfree(const void *ptr)

举例:
char *buf;

buf = kmalloc(BUF_SIZE, GFP_ATOMIC);
if (!buf)
        /* error allocting memory ! */

Later, when you no longer need the memory, do not forget to free it:

kfree(buf);

2. Vmalloc() 与 Vfree()

特点:

分配的内存,其虚拟的地址连续,但物理地址却不连续

2. 1 Vmalloc

The vmalloc() function is declared in <linux/vmalloc.h> and defined inmm/vmalloc.c.

Usage is identical to user-space's malloc():

void * vmalloc(unsigned long size)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值