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相关推荐

  1. 内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages【转】

    转自:http://www.cnblogs.com/yfz0/p/5829443.html 在内核模块中申请分配内存需要使用内核中的专用API:kmalloc.vmalloc.kzalloc.kcal ...

  2. kmalloc、vmalloc、malloc、calloc的区别

    1.kmalloc和vmalloc是分配的是内核的内存,malloc.calloc分配的是用户的内存; 2.kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续, ...

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

    kmalloc/kfree,vmalloc/vfree函数用法和区别 1.kmalloc 1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. ...

  4. kmalloc、vmalloc、malloc的区别

    简单的说: kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc ...

  5. 内核中的内存申请:kmalloc、vmalloc、kzalloc、get_free_pages 之间的区别

    kmalloc   vmalloc   kzalloc   get_free_page()是内核空间申请内存空间函数 malloc是用户空间申请内存函数 一 ,kmalloc() 与 kfree()  ...

  6. Kmalloc和Vmalloc的区别

    kmalloc()和vmalloc()介绍kmalloc()用于申请较小的.连续的物理内存1. 以字节为单位进行分配,在<linux/slab.h>中 2. void *kmalloc(s ...

  7. linux 内存管理之kmalloc、vmalloc、malloc、get_gree_pages的区别

    简述: 1.kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 2.kmalloc保证分配的内存在物理上是连续的,内存只有在要被DMA访问的时候才需要物理上连续,mal ...

  8. kmalloc与vmalloc的区别

    kmalloc 与 vmalloc都是内核源码中分配内存的函数 kmalloc 分配的内存:逻辑地址连续,物理地址也连续 vmalloc分配的内存: 逻辑地址连续,物理地址不一定连续

  9. kmalloc/kfree,vmalloc/vfree

    导读:A.表示内存分配(最终总是调用get_free_pages来实现实际的分配:这就是GFP前缀的由来)是代表运行在内核空间的进程执行的.使用GFP_KERNEL容许kmalloc在分配空闲内存时候 ...

最新文章

  1. OpenStack计算节点AMQP5672报错
  2. python中文版怎么安装-怎么安装python解释器
  3. 从机器学习谈起(机器学习简介)
  4. 两种方法设置html表格的宽高
  5. Linux QoS ingress处理流程
  6. 对数据库连接池的理解
  7. 移动端1px像素实现技巧 - 讲解篇
  8. 列表解析python_Python 列表解析
  9. hibernate中one-to-many实例一
  10. SQL:集成 SQL Server 2008 R2 SP3
  11. 湖南大学 离散数学 2018年期末考试 参考答案
  12. Oracle之rollUp函数
  13. Android之NDK开发入门
  14. 关于邮箱的正则表达式
  15. 简简单单几行Python代码就能暴力破解网站登录密码,真有这么强吗?
  16. Android开发项目--跑腿APP-跑儿
  17. 企业微信机器人还能这么玩?
  18. Mac上的QQ字体大小和颜色如何设置
  19. Java实现调用百度AI开放云平台(人脸识别API)
  20. 通讯协议和通讯方式概述

热门文章

  1. 大厂面试为什么总考算法?以及如何避开算法面试。
  2. 使用ADB解锁配置Android设备的新姿势
  3. Linux使用rz命令上传文件乱码
  4. rust 中的 String 和 str
  5. vue如何请求后端数据
  6. python+selenium实现12306抢票
  7. 数据库 SQL Server 视图 创建视图 查询视图 修改视图 删除视图
  8. 不是每一朵花都有提前开放的理由
  9. ubuntu镜像的选择:i386还是amd64?
  10. 如何运行Python文件?