资源生命周期Resource lifetime

让分配与释放的边界对应资源的实际使用范围。

核心约束
所有使用必须发生在资源仍有效的区间内;逃逸引用要有明确所有权。
适用问题
请求内存池、阶段性编译对象、批量资源清理。
边界与取舍
一次释放整组资源前须确认所有使用者结束;不可把作用域当成并发同步。
block Ablock Busedfreerelease pool
在块内推进分配游标,空间不足时扩展;区域结束后统一清理,块内小对象不能任意单独释放。

常见操作#

以请求内存池和作用域清理为例;r 为实际需要释放的资源数。

操作时间成本条件与说明
注册所有权 / 清理动作元数据维护或引用状态更新需要明确唯一所有者、借用者和释放时机,避免同一资源被重复管理。
结束生命周期遍历资源 + 各自清理成本释放内存、关闭描述符或等待异步操作可能有不同代价;不能统一承诺 O(1)O(1)。

实施成本#

时间成本
分配、转移与释放的实际路径分别计算
空间成本
存活对象 + 清理记录 + 被延迟释放的资源

共享一个生命周期能简化出错清理,但过粗的生命周期可能延长资源占用;异步回调需要确保其使用期间对象仍有效。

工程中的应用#

4 个案例 · 附源码
原始实现与接口资料

nginx 1.26.3 · Pool lifecyclengx_destroy_pool 的清理回调与内存块释放顺序。

GLib · Automatic cleanup作用域结束自动释放、清理函数与所有权转移的使用规则。

5 个概念