
Hat
译者
⚠️ 注意
如果您发现了错误,欢迎 参与贡献。
资源池 (pool) 是保存其他资源列表的容器。释放池将导致其中所有资源被一同释放。
每个 resource 都链接到某个池(除了未链接到任何池的根池)。因此所有资源形成一棵树结构:
root_pool
├── bgp_pool
│ ├── bgp_session1_pool
│ │ ├── event[0]
│ │ ├── socket[0]
│ │ └── timer[0]
│ └── bgp_session2_pool
├── ospf_pool
│ ├── area0_pool
│ └── area1_pool
└── rt_pool💡 译者注
资源池的树形结构是理解 BIRD 内存管理的关键。当你看到 BIRD 中几乎所有模块都有"私有池"(在 proto_init() 中创建,在 proto_shutdown() 中释放)时,其背后正是资源池机制。模块关闭时只需 rfree(proto_pool) 即可释放该协议实例的所有关联资源——路由、邻居状态、定时器、socket 等——无需逐一手动清理。
| 函数 | 说明 |
|---|---|
rp_new(p, name) | 在指定父池中创建新资源池 |
rmove(res, p) | 将一个资源移动到另一个池(改变生命周期归属) |
rfree(res) | 释放单个资源(及其所有子资源,如果是池) |
rdump(res) | 调试:打印资源树(需要 BIRD 以调试模式编译) |

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