
Hat
译者
⚠️ 注意
如果您发现了错误,欢迎 参与贡献。
大多数使用经典过程式编程语言实现的大型软件项目,最终都会产生大量负责资源分配和释放的代码。这类代码中的 bug 往往极难发现——它们通常只导致"资源泄漏"(占用大量无人引用的内存和其他资源)。
BIRD 通过引入一个资源跟踪系统解决了此问题,该系统:
每个分配的资源由一个以标准头部开始的结构表示:
struct resource {
node n; // 链表节点
struct resclass *class; // 指向资源类的指针
};resclass 资源类结构包含指向实现通用资源操作的函数指针:
| 函数指针 | 说明 |
|---|---|
free(res) | 释放该资源 |
dump(res) | 调试输出资源信息 |
lookup(res, ...) | 按名称查找子资源 |
memsize(res) | 返回资源占用内存大小 |
💡 译者注
BIRD 的资源跟踪系统本质上是一个手动管理的对象生命周期框架。在缺乏 GC (垃圾回收) 的 C 语言环境中,这种设计通过"池化"(pooling)实现了类似 RAII (Resource Acquisition Is Initialization) 的效果:当一个模块关闭时,只需释放其顶层资源池,所有子资源自动递归释放。这使得 BIRD 在协议重启 (graceful restart)、配置重载等涉及大量资源创建/销毁的场景中能保持内存安全。
| 类型 | 结构 | 说明 |
|---|---|---|
| 资源池 (Pool) | pool | 容器,保存其他资源列表。释放池时所有子资源一同释放 |
| 内存块 (Memory Block) | — | 普通内存分配 |
| 线性内存池 (Linpool) | linpool | 快速顺序分配,一次性整体释放 |
| Slab 分配器 (Slab) | slab | 同尺寸对象的高效分配器 |
| 事件 (Event) | event | 异步回调 |
| 定时器 (Timer) | timer | 定时回调 |
| 套接字 (Socket) | socket | OS 网络套接字,与事件循环集成 |

译者
原文作者: <Ondrej Filip>, <Martin Mares>, <Maria Matejka>, <Ondrej Zajicek> 原文链接: https://bird.network.cz/?get_doc&v=20&f=prog-8.html#ss8.1 原文标题: 8.1 Introduction
遵循协议: CC BY-NC-SA 4.0 / 译者: hat / 翻译时间: 2026-05-01 / 本文链接: https://bird.xmsl.dev/docs/developer-guide/8-1-introduction.html