slab分配
来源:互联网 发布:快刀软件破解 编辑:程序博客网 时间:2024/04/29 22:17
slab分配
基于堆的分配会产生内存碎片
基于slab的分配会产生内存浪费
与传统的内存管理模式相比, slab 缓存分配器提供了很多优点。首先,内核通常依赖于对小对象的分配,
它们会在系统生命周期内进行无数次分配。slab 缓存分配器通过对类似大小的对象进行缓存而提供这种功能,
从而避免了常见的碎片问题。slab 分配器还支持通用对象的初始化,从而避免了为同一目而对一个对象重复进行初始化
。最后,slab 分配器还可以支持硬件缓存对齐和着色,这允许不同缓存中的对象占用相同的缓存行,
从而提高缓存的利用率并获得更好的性能。
API 函数
现在来看一下能够创建新 slab 缓存、向缓存中增加内存、销毁缓存的应用程序接口(API)以及 slab 中对对象进行分配和释放操作的函数。
第一个步骤是创建 slab 缓存结构,您可以将其静态创建为:
struct struct kmem_cache *my_cachep;
然后其他 slab 缓存函数将使用该引用进行创建、删除、分配等操作。kmem_cache 结构包含了每个中央处理器单元(CPU)的数据、
一组可调整的(可以通过 proc 文件系统访问)参数、统计信息和管理 slab 缓存所必须的元素。
kmem_cache_create
内核函数 kmem_cache_create 用来创建一个新缓存。这通常是在内核初始化时执行的,或者在首次加载内核模块时执行。其原型定义如下:
struct kmem_cache *
kmem_cache_create( const char *name, size_t size, size_t align,
unsigned long flags;
void (*ctor)(void*, struct kmem_cache *, unsigned long),
void (*dtor)(void*, struct kmem_cache *, unsigned long));
name 参数定义了缓存名称,proc 文件系统(在 /proc/slabinfo 中)使用它标识这个缓存。 size 参数指定了为这个缓存创建的对象的大小,
align 参数定义了每个对象必需的对齐。 flags 参数指定了为缓存启用的选项。
对于小型的嵌入式系统来说,存在一个 slab 模拟层,名为 SLOB。
这个 slab 的替代品在小型嵌入式 Linux 系统中具有优势,但是即使它保存了 512KB 内存,
依然存在碎片和难于扩展的问题。在禁用 CONFIG_SLAB 时,内核会回到这个 SLOB 分配器中。
- slab分配
- slab分配机制
- Slab分配机制
- Slab分配机制
- Nginx slab 分配机制
- Slab分配机制
- slab内存分配
- 内存管理-SLAB(分配SLAB对象kmem_cache_alloc())
- 详解slab机制(3) slab分配机制
- slab alloc内存分配机制
- slab分配机制(转)
- slab alloc内存分配机制
- slab分配器分配task_struct结构
- slab allocator 内存分配技术
- slab alloc内存分配机制
- 内存分配-slab分配器1
- Linux内存分配机制:SLAB / SLUB / SLOB
- Linux2.6为数据结构分配内存-slab
- Java排序算法(十一):基数排序
- MySQL Server 5.0 – 安装及配置
- CTime类及其变量使用
- 将Android项目导入到Eclipse开发环境(ZZ)
- http header头设置反向代理不缓存
- slab分配
- 如何在android中实现链接,下面四种方式告诉你
- vector删除元素 演示
- mysql错误:Column count doesn't match value count at row 1
- 2011/07/10
- 链表类面试题
- RNDIS
- 关于新闻发布系统
- 单元测试——No Silver Bullet