专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C 教程 » slab翻译:对slab内存管理源代码的说明 »正文

slab翻译:对slab内存管理源代码的说明

来源: 发布时间:星期四, 2008年9月25日 浏览:123次 评论:0
学习计算机原理,最好是实践或看高手写的源代码,在一定程度上就不再会感到原理的抽象。关于slab一些原理资料,可以在这里下载或到网站有更多的信息和资料。Slab内存管理机制已被广泛使用,要找到使用slab管理内存的开源代码也不难,如一些OS内核中的内存管理。既然要分析理解slab,最好还是选择复杂度和代码量都不要太大的,在这里我选取了glib-2.12.9gslice.c实现的slab机制相关代码作为分析对象。注意Glib库是针对用户级的而非OS内核级别的。

gslice.c中实现了三种内存分配机制:一是slab;二是比slab更适合于多CPU/多线程的magazine;三是只使用纯粹的malloc。本文章只针对slab相关的源代码进行分析。

在分析代码时主要从以下几个方面入手:先从分配器总体数据结构的关系进行描述;二是看分配器allocator是如何初始化的;接下来是分析分配器如何分配和回收内存(chunk)。

Allocator分配器总体结构:

下面先来看一些重要的数据结构和变量:

…………. //点代表省略的代码

130 typedef struct _ChunkLink ChunkLink;

131 typedef struct _SlabInfo SlabInfo;

132 typedef struct _CachedMagazine CachedMagazine;

// 这个结构也表明了一个Chunk的最小值是两个指针大小

133 struct _ChunkLink {

134 ChunkLink *next;

135 ChunkLink *data; //这字段在slab中未被使用

136 };

137 struct _SlabInfo {

138 ChunkLink *chunks;

139 guint n_allocated;

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: