[初级知识]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)

你可能感兴趣的:(linux,kernel)