kmalloc和malloc类似,可被阻塞,分配的内存保持原有数据,分配的区域在物理内存中也是连续的。

头文件:

<linux/slab.h>

函数原型:

void *kmalloc(size_t size, int flags);

size:分配的块的大小,flags:分配标志

标志:

定义在<linux/gfp.h>

GFP_KERNEL(常用)

最常用的标志,内核内存的通常分配方法,可能引起休眠。允许kmalloc在空闲内存较少时把当前进程转入休眠以等待一个页面,使用GFP_KERNEL分配内存的函数必须是可重入的。

GFP_ATOMIC(常用)

原子性地分配一些空闲内存页,用于在中断处理例程或其它运行于进程上下文外的代码中分配内存,不会休眠。

其它的一些标志:

GFP_USER,用于为用户空间分配内存,可能引起休眠

GFP_HIGHUSER,有高端内存的话就从高端内存分配

GFP_NOIO,禁止任何IO的初始化

GFP_NOFS,不允许执行任何文件系统的调用

下面的标志可以和上面的标志或( | )起来使用,控制如何进行分配:

__GFP_DMA,分配发生在可进行DMA你内存段中

__GFP_HIGHMEM,分配的内存可位于高端内存

__GFP_COLD,内存分配器试图返回处理器缓存中的内存页

__GFP_NOWARN,避免内核在分配内存失败时产生警告

__GFP_HIGH,高优先级请求

__GFP_REPEAT,重新尝试分配

__GFP_NOFALL,始终不返回失败

__GFP_NORETRY,请求内存不成功,立即返回

内存区段:

linux内核把内存分为三个区段:可用于DMA的内存、常规内存和高端内存。通常的内存分配都在常规内存区,通过标志页可以请求在其他区段中分配。

高端内存是32位平台为了访问相对大量的内存而存在的一种机制。

当一个新页面通过kmalloc被分配时,内核会创建一个内存区段的列表以供搜索。如果指定了__GFP_DMA,则只搜索DMA区段;如果没有指定标志,则搜索常规区段和DMA区段;如果指定了__GFP_HIGHMEM,则三个区段都会被搜索。

kmalloc不能分配高端内存。

分配大小size:

内核负责管理系统物理内存,物理内存只能按页面进行分配。linux处理内存分配的方法是,创建一系列的内存对象池,每个池中的内存块大小是固定一致的。处理内存分配请求时,就直接在包含有足够大的池中传递一个整块给请求者。

kmalloc能处理的最新内存块是32或64(取决于当前体系结构使用的页面的大小)。

kmalloc能分配的内存大小,存在一个上限。如果希望代码有很好的移植性,则不应该分配大于128KB的内存。

linux驱动37:kmalloc内存分配相关推荐

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

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

  2. Linux创建线程时 内存分配的那些事

    文章目录 问题描述 问题分析 针对问题1 的猜测: 针对问题2 的猜测: 原理追踪 总结 问题描述 事情开始于一段内存问题,通过gperf工具抓取进程运行过程中的内存占用情况. 分析结果时发现一个有趣 ...

  3. linux c 指针和内存分配内存,linux-C基础系列-内存管理(野指针).md

    野指针概述 野指针通常指的是指针变量中保存的值不会死一个合法的内存地址,但又对其访问.需要注意的是野指针不是空指针,而是指向内存不可用的指针. C语言中对于空指针(NULL)是可以判断出来的,但是野指 ...

  4. linux c 指针和内存分配内存,Linux C语言指针与内存学习笔记

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 环境准备 Ubuntu 操作系统.VIM 编辑器.GCC 编译器.GDB调试器. 初始指针 通过两个数的交换引入指针指针 ...

  5. Linux 进程资源分配,linux 进程管理和内存分配

    1.进程相关概念 进程:正在运行中的程序 内核功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等 Process:运行中的程序的一个副本,是被载入内存的一个指令集合 进程 ID(Pro ...

  6. 【Linux内核】kmalloc分配内存大小(非常详细)

    文章目录 1. kmalloc分配内存的大小 1.1. KMALLOC_MAX_SIZE:kmalloc可以分配的最大内存 1.2. KMALLOC_MAX_CACHE_SIZE:kmalloc使用s ...

  7. 内存分配---kmalloc

    kmalloc 内存分配引擎是一个功能强大的工具,下面我们来讲解一下这个函数. Kmalloc 函数分配内存时有几个特点: 1.获取内存空间时不会对内存空间进行清零,也就是说,分配给它的区域仍然保持着 ...

  8. CMA大段设备内存分配

    在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,对于内核如果申请一块连续的内存空间该怎么处理呢? 首先向到的是利用内核提供的kma ...

  9. malloc用户态内存分配

    学习完了用户进程地址空间,那么从本章开始学习下用户空间的内存分配.对于我们来说,对是进程中用于动态分配变量和数据的内存区域,堆的管理对应用程序员来说是不可见的.因为它依赖于标准库提供的各种辅助函数(m ...

最新文章

  1. 在多变环境中长期定位和建图的通用框架
  2. 医院六级电子病历建设思路及要点
  3. 中间表增加额外字段_知识分享 I 这样显示报表筛选字段 你学会了吗
  4. HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)
  5. 记录webpack commonJs 加载文件规则
  6. 大数据之-Hadoop本地模式_WordCount官方案例---大数据之hadoop工作笔记0022
  7. linux device attr,DEVICE_ATTR的使用
  8. Go语言实现线程安全访问队列
  9. CSS颜色代码对照表
  10. windows系统TLQ8安装时提示载入java vm时windows出现错误
  11. es文件浏览器smb服务器,ES文件浏览器怎么连接电脑SMB,可以参考这篇文章
  12. 微信企业号服务器搭建,微信企业号开发之如何建立连接
  13. B. Ternary Sequence
  14. 2019最新抖音全方位数据分析报告
  15. 面试时如何反问面试官
  16. 太棒了!CSS颜色基本样式
  17. 我的第一个嵌入式linux驱动3_完善2
  18. 回调函数的注册机制为什么会在嵌入式固件开发中应用如此广泛?
  19. 如何用js实现简单的页面html动态加载(“看更多“/页面折叠功能)
  20. 2022年六款最好用的运动耳机、骨传导耳机推荐

热门文章

  1. 淘宝 TOP 平台Open API入门篇
  2. 攻克论文写作系列之1:怎样构建有条理的学术论文?
  3. 基于DSP的数字图像处理(1)
  4. day14_雷神_前端02
  5. 通过java代码实现控件背景渐变色设置
  6. java中jcl,从批处理JCL执行java
  7. 北京理工计算机实验二报告,北京理工大学计算机实验二报告表.doc
  8. 【JavaSE】零基础入门Java语言
  9. 解决 s3.amazonaws.com 亚马逊云文件下载慢的方法(Ubuntu)——亲测可用2021
  10. odoo Failed to load registry 错误