Linux笔记记录4 kmalloc/vmalloc

malloc(开辟用户内存)


kmalloc(开辟内核内存)

1、保证分配的内存物理连续

2、能分配的大小有限

3、使用slab内存分配机制

#include<linx/slab.h>  void *kmalloc(size_t size,int flags);

它的第一个参数是要分配的块大小,第二个参数是分配标志。

4、最大能开辟128k-16  16个字节被页描述符占用

5、通过分配非连续的物理内存块,再修改页表把内存映射到逻辑地址空间的连续区域中

6、kmalloc()实现在__do_kmalloc(),

__do_kmalloc()调用__cache_alloc()分配一个slab,

__cache_alloc()调用路劲最总下去发现cache_grow()中使用kmem_getpages()分配一个物理页面

kmem_getpages()调用的alloc_pages_node()使用的__alloc_pages()返回struct page结构

这个结构是系统中描述物理页面的,这是为社会么kmalloc分配的物理地址。(————这段来自百度百科)

7、通过kfree释放内存

vmalloc(开辟内核内存)

1、保证在虚拟地址空间连续

2、能分配的大小比kmalloc大

3、速度比kmalloc慢

4、使用伙伴系统分配机制

void *vmalloc(unsigned long size);

5、通过vmalloc获得的页必须一个个进行映射,函数返回一个指针指向逻辑上连续的一块内存,发生错误返回NULL

6、vmalloc可能睡眠,不能从中断上下文进行调用 也不能从其他不允许阻塞的情况下调用

7、通过vfree释放内存

__get_free_page(直接申请页)

1、连续分配物理内存

2、通过free_pages释放内存


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值