侵入式容器Intrusive container

把链接或索引节点嵌入被管理对象,由容器维护这些成员。

核心约束
容器中的每个链接必须属于仍存活且位置稳定的宿主对象。
适用问题
内核对象、任务队列、需要多重索引的系统对象管理。
边界与取舍
对象布局与容器耦合;摘除、移动、释放和并发访问需要明确规则。

常见操作#

n 为对象数;链接字段嵌入对象,操作由底层链表或树决定。

操作时间复杂度条件与说明
对象与容器节点互相定位O(1)O(1)已知内嵌链接的固定偏移;对象必须仍然存活。
链表中插入 / 摘除已知节点O(1)O(1)双向链表,不分配独立容器节点;不包含查找。
红黑树中按键查找 / 插入 / 删除O(log⁡n)O(\log n)比较成本为 O(1)O(1),维护平衡树不变量。
遍历O(n)O(n)遍历链接或树节点;容器不自动延长对象的生命周期。

时间与空间#

时间复杂度
取决于底层链表、树或哈希表
存储空间
O(n)O(n)

每个成员关系仍需链接字段;省去的是独立节点和对应分配,不是所有索引空间。

工程中的应用#

2 个案例 · 附源码
基础原理参考资料

Boost.Intrusive · Presenting containers分别说明侵入式链表、红黑树等容器的布局和操作成本。

Boost.Intrusive · Intrusive vs non-intrusive节点嵌入、无额外节点分配和对象生命周期责任。

7 个概念