kmalloc和vmalloc
kmalloc和vmalloc
1.kmalloc
1.头文件
#include <linux/slab.h>
/*
function:分配size大小连续的物理内存块
size: 需要分配的内存块大小
flags:分配器标志
*/
void *kmalloc(size_t size, gfp_t flags)
2.gfp_t mask
分配器的标志可以分为三类:行为修饰符、区修饰符以及类型修饰符
行为修饰符表示内核应当如何分配所需的内存,在特定的情况下,只能使用某些特定的方法分配内存,比如中断中分配内存的
过程中不能睡眠,因为中断处理程序不能被重新调度。
区修饰符表示从哪里分配内存,内核把物理内存分配成多个区,每个区用于不同的目的,区修饰符表示到底从这些区的哪一个分配内存
类型修饰符组合了行为修饰符和区修饰符
头文件
#include <linux/gfp.h>
1.行为修饰符
__GFP_IO | 分配器可以启动磁盘IO |
---|---|
__GFP_FS | 分配器可以启动文件系统IO |
__GFP_HIGH | 分配器可以访问紧急事件缓冲池 |
__GFP_NOWARN | 分配器将不打印失败警告 |
__GFP_NOFAIL | 分配器将无限地重复进行分配,分配不能失败 |
__GFP_NORETRY | 分配器在分配失败时绝不会重新分配 |
__GFP_COMP | 添加混合页元数据 |
2.区修饰符
__GFP_DMA | 从ZONE_DMA分配 |
---|---|
__GFP_HIGHMEM | 从ZONE_HIGHMEM分配或者ZONE_NORMAL分配 |
__GFP_DMA32 | 从ZONE_DMA32分配 |
3.类型修饰符
2.kfree
头文件
#include <linux/slab.h>
/*
function:释放由kmalloc分配的内存
*/
void kfree(const void *);
3.vmalloc
头文件:
#include <linux/vmalloc.h>
/*
function:分配一段size大小内存虚拟地址是连续的内存块,物理地址不连续
*/
void *vmalloc(unsigned long size)
/*释放vmalloc申请的内存块*/
void vfree(const void *addr)
kmalloc和vmalloc区别:
1.kmalloc申请的内存在物理地址上是连续的,vmalloc申请的内存在虚拟地址上是连续的
2.vmalloc为了把物理地址上不连续的页转换成虚拟地址空间上连续的页,需要建立页表项,浪费性能
kmalloc和vmalloc相关推荐
- 内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages【转】
转自:http://www.cnblogs.com/yfz0/p/5829443.html 在内核模块中申请分配内存需要使用内核中的专用API:kmalloc.vmalloc.kzalloc.kcal ...
- kmalloc、vmalloc、malloc、calloc的区别
1.kmalloc和vmalloc是分配的是内核的内存,malloc.calloc分配的是用户的内存; 2.kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续, ...
- kmalloc/kfree,vmalloc/vfree函数用法和区别
kmalloc/kfree,vmalloc/vfree函数用法和区别 1.kmalloc 1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. ...
- kmalloc、vmalloc、malloc的区别
简单的说: kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc ...
- 内核中的内存申请:kmalloc、vmalloc、kzalloc、get_free_pages 之间的区别
kmalloc vmalloc kzalloc get_free_page()是内核空间申请内存空间函数 malloc是用户空间申请内存函数 一 ,kmalloc() 与 kfree() ...
- Kmalloc和Vmalloc的区别
kmalloc()和vmalloc()介绍kmalloc()用于申请较小的.连续的物理内存1. 以字节为单位进行分配,在<linux/slab.h>中 2. void *kmalloc(s ...
- linux 内存管理之kmalloc、vmalloc、malloc、get_gree_pages的区别
简述: 1.kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 2.kmalloc保证分配的内存在物理上是连续的,内存只有在要被DMA访问的时候才需要物理上连续,mal ...
- kmalloc与vmalloc的区别
kmalloc 与 vmalloc都是内核源码中分配内存的函数 kmalloc 分配的内存:逻辑地址连续,物理地址也连续 vmalloc分配的内存: 逻辑地址连续,物理地址不一定连续
- kmalloc/kfree,vmalloc/vfree
导读:A.表示内存分配(最终总是调用get_free_pages来实现实际的分配:这就是GFP前缀的由来)是代表运行在内核空间的进程执行的.使用GFP_KERNEL容许kmalloc在分配空闲内存时候 ...
最新文章
- OpenStack计算节点AMQP5672报错
- python中文版怎么安装-怎么安装python解释器
- 从机器学习谈起(机器学习简介)
- 两种方法设置html表格的宽高
- Linux QoS ingress处理流程
- 对数据库连接池的理解
- 移动端1px像素实现技巧 - 讲解篇
- 列表解析python_Python 列表解析
- hibernate中one-to-many实例一
- SQL:集成 SQL Server 2008 R2 SP3
- 湖南大学 离散数学 2018年期末考试 参考答案
- Oracle之rollUp函数
- Android之NDK开发入门
- 关于邮箱的正则表达式
- 简简单单几行Python代码就能暴力破解网站登录密码,真有这么强吗?
- Android开发项目--跑腿APP-跑儿
- 企业微信机器人还能这么玩?
- Mac上的QQ字体大小和颜色如何设置
- Java实现调用百度AI开放云平台(人脸识别API)
- 通讯协议和通讯方式概述