位图算法
概念: 这种位图即二维数组,通过二维数组来保存内存的使用情况,每个位的值代表这个块的使用情况,0为空闲,1为被占用。
优点: 查找快;对于内存的管理比较清晰可见。
缺点: 需要通过遍历的方式才能知道哪些内存是可以使用的,并且这种内存分配方式不能避免内存碎片的问题。
链式算法
概念: 这种分配算法通过链表来保存和维护块的使用信息,它包括多个单元,每个单元是一个连续的数组,数组的第一位用来表示这个数组是用来表示的是已占用块信息还是空闲块信息,第二位是块的起始点,第三位表示从这个位置出发有多少个块是被占用(空闲)的,数组的最后一位存放的是指向下一个数组的首部地址的指针。
如何操作: 当某个块可以直接被使用时,就可以修改它的状态并分配内存;如果只需要使用其中的一部分,那么可以把它拆开,分为两个链表元素,当被分配的块被释放后,再合并这两块内存。
优点: 方便进行内存的分配和回收,对链表修改速度快。
缺点: 需要遍历链表才能找到合适的内存区间。
伙伴(buddy)算法
概念: 这种方式基于数组结合链表来实现,它解决了链式算法查找慢的问题,伙伴算法对不同大小的内存进行分类管理,可以根据内存分配的需求直接定位到相应位置,提升内存查找速度。伙伴算法的数据结构是通过一个free_area的数组,找到合适的数量级的位置,这个位置维护着一段链表,如果对应链表元素可用,就进行分配,同时还可以对剩下的内存进行拆分,并把它们调整到低数量级,可用于分配小对象,当这块内存对应区