Brains


Algorithm、Machine Learning、Search、cloud computing
on Memory, 动态分配器的简易实现

动态内存分配器的一个简易实现

堆是进程空间里很重要的一部分,有效的使用堆可以很大程度上提高程序的性能,本文参考《深入理解计算机系统》简要的实现了一个内存分配器。 介绍 这是用C语言实现的一个简易的动态内存分配器,模拟动态内存的分配与回收,是本学期CSAPP课程的第五个实验。它是基于mmlib包所提供的一个存储器系统模型,在对此进行的扩充。实现了用于堆Heap内存管理的动态分配功能。 内存管理与动态分配 内存管理 是在系统层面对计算机内存的一种操作,它的基本要求是:在程序需要内存的时候,能够提供一种方式动态的分配给它;并且当应用程序不再使用时,要能回收。而操作系统动态分配的内存区域称作为堆(Heap)。 动态内存分配 动态内存分配器维护着一个进程的虚拟存储区域,称为堆(Heap),对于每个进程,内核维护着一个变量brk,它指向堆区域的顶部。栈是向下增长,而堆是向上增长的。而对于brk的改变需要系统调用,因为系统调用有很大的开销,如果让用户每次需要堆的时候都自己调用系统调用是很浪费时间的,所以需要对这堆Heap的分配进行封装。 一般做法是先分一大块堆空间,然后对分配的堆空间管理起来,提供接口,以后每次用户需要申请堆的时候,调用这些封装后的函数就行了,它们是用户层的函数,开销不大,这种封装也叫做动态内存分配器。 分配器有两种类型,一种是隐式分配,一种是显示分配。本次实现是基于显示分配的。 - 显示分配:要求应用程序显示的释放任何已分配的块,
Read More