关于内存池的一些疑问~~
最近面试被问了一个内存池的实现,关键是内存块的组织,说来惭愧,由于之前没有详细去了解过实现,只记得操作系统上有说过空闲链表的实现,即按分配的块用链表链接,有小块优先,大块优先等~~~~
后来回来认真地找了几个内存池实现的技术介绍,多数是以一个固定块,每个块又有固定长度的单元组成。但是小于块长度的内存分配请求会浪费空间,大于块长度的请求,又要用多块拼接而成。然而拼接的方法是个很大问题,如果设计为连续内存块,会有很严重的空洞问题;如果设计成链表结构,所有和这段信息相关的处理函数就都需要支持这种链表,否则就会引入额外的内存拷贝。
所有我有几个疑问:
(1)大块内存要怎么分配好呢?还是直接用系统分配实现?
(2)大家能否介绍一下工作中用到内存池地方,以及带来的性能效应怎么样呢?