博所搬至http://xiaogr.com
全部博文(79)
分类: LINUX
2008-01-07 18:06:13
Uclibc是嵌入式linux系统里面使用最多的c lib库。最近在学习linux内核内存管理方面的东西,学完之后一直对用户空间的内存管理很迷糊,特找了libc中的malloc部份代码研究了一下,小有心得。特总结成此文。
本文档结构:
一:准备知识
二:堆空间的管理结构
三:堆空间的初始化
四:FA结构的操作
五:malloc的实现
六:free的实现
七:总结
一: 准备知识:
用户空间中,经常会调用malloc 与 free进行内存管理,它是在进程的堆空间中分配内存。如下图所示:
二:堆空间的管理结构:
堆空间表示的数据结构
struct heap
{
//堆空间空闲区的表示结构
struct heap_free_area *free_areas;
//用于在多线程环境中加锁保护
#ifdef HEAP_USE_LOCKING
pthread_mutex_t lock;
#endif
};
heap_free_area结构在代码被代码作者称之为FA结构。它的定义如下:
struct heap_free_area
{
//空闲区的大小
size_t size;
//用于构造循环链表
struct heap_free_area *next, *prev;
};
注意:在FA结构里并没有定义指向空闲区的指针,这是因为FA结构正好放在空闲区的后面。堆栈区空间结构如下所示: