# ureydev_MemPool **Repository Path**: mitslyj/ureydev_MemPool ## Basic Information - **Project Name**: ureydev_MemPool - **Description**: 使用apache portable runtime库中的内存池实现的定长块缓存。 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-04-27 - **Last Updated**: 2022-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## ureydev_MemPool 以 Apache Portable Runtime(Apr)库为基础的定长内存池。 在Apr库中的内存池只能申请但不能单个释放,只能在一个事件的生命周期结束后进行整个内存池的释放。这在某些情况下需要特殊的内存回收机制来避免无限制的进行内存分配。 在Apr库中的hashmap就是用了apr内存池,其将hashmap节点在不用时放在free链表中,申请新的节点时优先从free链表取出不用的节点。 许多链表内存池的设计与这种思想如出一辙,因此我的内存池实现也采用这种思想。在内存块分配时,内存块的头几个字节存放当前内存块的链表结构等信息,后续内存才是实际分配的内存。在内存块的信息中,设计了在内存池初始化时确定的校验位,如果在内存释放时,校验位出错,说明内存头信息很可能被覆盖了,这样的内存块不在放入free链表中,也即不再被分配使用。