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

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

相关文章推荐

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

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

linux内核内存分配方式

  • 2012-02-02 09:58
  • 184KB
  • 下载

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

常见的Linux内核中内存分配函数1.原理说明  Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页...

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

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

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

1.原理说明   Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示。四级页表分...

linux内核内存分配(二、struct slab和struct kmem_cache)

前一篇blog linux内核内存分配(一、基本概念) 主要是分析linux内核内存的分配和物理页分配函数接口。但是在实际的操作中,不一定所有内存申请都需要一个物理页,很多只是需要分配几K大小的内存就...

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

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

Linux内核内存分配函数

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

Linux内核中内存分配函数

1.原理说明   Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示。四级页表分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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