ai-infra-interview-305

第 256 题:写一个线程安全的memory pool,支持allocatefree

题目

写一个线程安全的memory pool,支持allocatefree


完整讲解

一、目的与接口

内存池预分配大块内存、按块或按 size-class 分配/释放,减少 malloc/free 次数与碎片。接口通常为 allocate(size)free(ptr),多线程并发调用需保证线程安全。

二、实现要点

mutexspinlock 保护空闲链表(free list);按固定块大小或多种 size-class 管理;allocate 从链表取块,free 将块归还。高并发时可做 per-thread 子池 + 全局 fallback,减少锁竞争与假共享。

三、工程经验

大块预分配用 mallocmmap 一次;注意对齐与元数据开销;生产环境可选用 tcmalloc、jemalloc 等成熟实现。


面试要点


记忆要点

  1. 内存池 = 预分配 + free list + 线程安全(锁或 per-thread 子池)。
  2. allocate 从链表取、free 归还;注意锁粒度与假共享。
  3. 工程上大块预分配、控制开销;复杂场景用现成分配器。
返回模块 返回总览