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

原创 2016年08月31日 16:39:10

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)

版权声明:本文为博主原创文章,未经博主允许不得转载。

动态分配内存接口malloc/kmalloc与释放内存接口free/kfree

动态分配内存接口malloc/kmalloc与释放内存接口free/kfree

kmalloc/kfree,vmalloc/vfree函数用法和区别

1.kmalloc 1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. tiger说明:在用kmalloc申请函数后,要对起清零 用memset(...

linux内核内存分配(一、基本概念)

首先大概的可以看出左边的mem_map数组中存放的是page结构体元素,中间的是实际的物理内存,右边的是虚拟的地址范围; 他们之间的关系大概是这样的,mem_map数组中的元素和物理...

linux内核内存分配方式

  • 2012年02月02日 09:58
  • 184KB
  • 下载

.常见的Linux内核中内存分配

文章转载自http://ceeu.qianrushi.com.cn/article.asp?id=30545   1.原理说明   Linux内核中采 用了一种同时适用于32位...

linux内核中常见的内存分配方法

常用知识——linux内核中常见的内存分配方法 Linux内核中常见内存分配函数 1.    原理说明 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于...

Linux内核内存分配函数

Linux内核中内存的管理不像在内核外这么简单。和用户空间最大的不同是内核的内从空间不像用户空间那么容易得到,并不是总能轻易的得到想要的内存。页:内核最基本的内存管理单元就是页(page),因为MMU...

Linux内核中常见内存分配函数(一)

Linux内核中常见内存分配函数(一)
  • mao0514
  • mao0514
  • 2013年08月08日 17:57
  • 1261

Linux内核内存分配机制

现象 1 压力测试过程中,发现被测对象性能不够理想,具体表现为:   进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70   2 用ps -o majflt,minflt...

Linux内核中常见内存分配函数

Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表...
  • reille
  • reille
  • 2011年03月11日 09:06
  • 845
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[初级知识]linux内核开发中基本内存分配与申请
举报原因:
原因补充:

(最多只允许输入30个字)