首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    malloc、calloc、kmalloc、vmalloc 详解

    一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:Linux...,本专栏目的在于,记录学习Linux操作系统的总结 欢迎大家点赞 收藏 ⭐ 加关注哦!...// 原子分配,不睡眠 ptr = kzalloc(1024, GFP_KERNEL); // 分配并清零(类似calloc) // 硬件相关分配 ptr = kmalloc(1024, GFP_DMA...│ 8B│16B│32B│...│ └─────────────────┘ │ ▼ 用户请求128字节 → 从128B缓存slab分配 vmalloc 深入解析 #include linux...适合不要求物理连续的场景 选择原则: 用户空间:让malloc自动选择策略 内核小内存:kmalloc + 合适GFP标志 内核大内存/不要求连续:vmalloc DMA操作:kmalloc with GFP_DMA

    8410

    深入理解 Linux 物理内存分配全链路实现

    前文回顾 在上篇文章 《深入理解 Linux 物理内存管理》中,笔者详细的为大家介绍了 Linux 内核如何对物理内存进行管理以及相关的一些内核数据结构。...image.png gfp_mask 掩码中这些区域修饰符 zone modifiers 定义在内核 /include/linux/gfp.h 文件中: #define ___GFP_DMA...如果掩码既没有设置 ZONE_HIGHMEM 也没有设置 __GFP_DMA,则走到最后的分支,默认优先从 ZONE_NORMAL 区域中进行内存分配,如果容量不够则降级至 ZONE_DMA 区域中分配...__GFP_DMA & __GFP_HIGHMEM ZONE_DMA __GFP_HIGHMEM ZONE_HIGHMEM -> ZONE_NORMAL -> ZONE_DMA 除了上述介绍 gfp_t...__GFP_DMA #define GFP_DMA32 __GFP_DMA32 #define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM) GFP_ATOMIC

    1.5K10

    深度解读 Linux 内核级通用内存池 —— kmalloc 体系

    而在被大规模运用的服务器 Linux 操作系统中,slab allocator 体系采用的是 slub 实现,所以本文我们还是以 slub 实现来讨论。...关于 alloc_pages 函数的详细内容,感兴趣的同学可以回看下笔者之前的文章 《深入理解 Linux 物理内存分配全链路实现》。...如果 gfp_t flags 明确指定了 __GFP_DMA,则内核向 kmalloc 内存池申请的内存均来自于 ZONE_DMA 物理内存区域。...通常情况下 kmalloc 内存池中的内存都来源于 NORMAL 直接映射区 // 如果没有特殊设定,则从 NORMAL 直接映射区里分配 if (likely((flags & (__GFP_DMA...// DMA 区域中的内存是非常宝贵的,如果明确指定需要从 DMA 区域中分配内存 // 则选取 DMA 区域中的 kmalloc 内存池 return flags & __GFP_DMA

    1.8K30
    领券