自由表(英语:free list)是一种用来实现特定动态内存分配方案的数据结构,也称自由列表。自由表的核心原理是将若干未分配的内存块用链表连接起来,将未分配区域的第一个字作为指向下一个未分配区域的指针使用。自由表非常适合用来实现内存池,因为内存池中对象的大小都是相同的。
用自由表实现内存的分配和回收非常简单:回收内存时只需将内存块链入自由表;分配时也只需从自由表的一端取下即可直接使用。如果内存块的大小不一,则分配前还需要在自由表中搜索足够大的内存块,可能有一定的额外消耗。
因为自由表使用了链表结构,所以也继承了它的劣势:访问局部性低下,难以利用缓存。