背景
v4
中使用了链表存储了不同大小的内存块的方式进行内存池的实现,实际测试中发现内存浪费比较严重,因此如何设计出使用效率高,操作简洁的内存池就成了 v5
的一个任务。
使用 make
使用 go 原生的内存分配,意味着交给 GC
来回收,在m7s
中测试发现gc
占据非常大的开销。
自定义内存分配
C 风格的内存分配
void * mem = malloc(100)
free(mem)
这种分配方式最广为人知,也是最简洁易懂的,因此如果能实现这种方式,是最佳的。
设想一下
func (ma *MemoryAllocator) Malloc(size int) (memory []byte) {
}
func (ma *MemoryAllocator) Free(memory []byte) {
}
问题:如何在 Free