[Linux内存]linux内存分配函数总结

本文深入探讨了Linux内核中的内存分配函数,包括kmalloc、kmem_cache_create等,详细介绍了各种内存分配接口的应用场景及实例,并对比了用户层的malloc、calloc函数的特点与用途。
摘要由CSDN通过智能技术生成

linux内核相关

1,linux内核内存分配函数总结

单位接口算法
动态大小kmalloc/kfree/krealloc/kcalloc 按大小组织的缓存数组
固定大小kmem_cache_create/kmem_cache_destroy
kmem_cache_alloc/kmem_cache_free
Slab[2]
2^n页alloc_pages/free_pages
__get_free_pages/__free_pages
伙伴算法,分配若干(物理连续)页面,返回指向该区域第一个字节的指针

 vmalloc
工作方式类似于kmalloc(), 不过虚拟地址连续,物理地址不连续。获得大块内存时使用,通常在creat_module()系统调用的地方使用。


2,各种API应用举例

kmem_cache_create和kmem_cache_alloc,比如在Namespace.c文件的mnt_int()函数中调用kmem_cache_creat()函数创建名为mnt_cache的缓存,然后在调用do_mount()函数的时候调用kmem_cache_alloc()函数分配一个mount结构体。



用户层相关:

3,malloc和calloc函数

void *calloc(size_t n, size_t size);

在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
extern void *malloc(unsigned int num_bytes);
使用malloc()和calloc()函数分配的内存使用完以后一定要用free()函数将内存手动释放。

malloc()函数申请到的内存空间在什么范围:答:0X00000000到0XBFFFFFFF


4,linux内核有些地方分配内存不允许失败,这个时候应该如何保证

答:使用内存池技术,内存池本质也是后背高速缓存,只是在使用前提前准备好,缺点是浪费内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值