C 语言对象池
更新时间:2026-08-26。本文是
languages/c/主题高手层的骨架文档(占位),完整展开将在后续批次补齐。
本文要回答的问题
- 对象池和内存池是一回事吗?差在哪?
- 怎么做到"对象不销毁、只是借用"?
- 对象池适合什么样的业务?
一、对象池 vs 内存池
| 维度 | 内存池 | 对象池 |
|---|---|---|
| 关注点 | 内存块的分配速度 | 对象的创建/销毁开销 |
| 粒度 | 字节块 | 逻辑对象(结构体+状态) |
| 复用方式 | 内存再分配 | 对象状态重置后继续用 |
| 典型开销 | malloc 慢 | malloc + 初始化(清零、构造) |
对象池在内存池之上多一层:对象不销毁,归还时只重置状态,下次直接借走,省掉重复的初始化成本。
二、free list 实现骨架
c
typedef struct Node {
int used; /* 0=空闲 1=在用 */
struct Node *next; /* 空闲链表 */
/* ...业务字段... */
} Node;要点:空闲对象串成链表,acquire() 取头节点并标记 used,release() 重置状态、压回头部。全部在 O(1) 内完成,且无 malloc 调用。
三、适用场景
- 高频短生命周期对象(每请求一个事务上下文)。
- 需要稳定地址的对象(别人持有指针,不允许被搬走)。
- 与内存池搭配:池里定长块 + 复用逻辑 = 完整对象池。
四、与入门层的衔接
- malloc/free 生命周期,见 malloc 与 free。
- 底层存储方案,见 内存池。
- 泄漏与所有权约定,见 内存泄漏与悬垂指针。
一句话总结
对象池 = 内存池 + 状态复用:借出时只标记、归还时只重置,把"创建销毁"降为"借还",适合高频短命对象的场景。
本文为骨架文档:核心结构已就位,示例代码与实测数据将在后续批次补齐。