几个内存分配API的区别

本文介绍了内核内存分配的几个关键API,包括alloc_pages主要用于从buddy系统分配页级内存,kmalloc和slab是slab分配器的一部分,vmalloc在内核空间分配可能不连续的内存,malloc则在用户空间分配并可能在访问时才映射物理内存,而mmap在大于128KB时作为malloc的替代方式。
摘要由CSDN通过智能技术生成

内存分配的API有:alloc_pages, kmalloc, slab分配,vmalloc, malloc,下面简单说明一下以上几个函数的差别:

alloc_pages:主要用来从buddy系统中分配内存,以页为单位分配区域需要通过gfp_flag指定,一般情况下会优先从highmem zone分配,返回的是分配到物理首个页面的管理结构体struct page,buddy里面页面的组织情况如下图:

alloc_pages返回的是满足条件的用于管理free_area中对应大小的block的page struct的地址,同时每个free_area元素的migrationtype中的内存block的管理者都通过page组成的lru链表管理,而alloc_pages返回的是通过list_entry来获取这个lru链表中的一个page struct返回,从管理页面的角度,buddy可以化成如下示意图:

而alloc_pages如果分配的order是小于等于4,则返回的是上图中其中一个page struct

kmalloc和slab:kmalloc是slab的一个通用分配内存API,slab分配器从buddy拿到需求大小且物理内存连续的物理页面个数,然后kmalloc再从slab分配器中获取需要的slab对象,slab对象大小可以为64,128,256等等个字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值