知识卡片

Buffer三层抽象分离内存所有权与视图

专业/工作 · 511

内容

Ceph 的 buffer 模块用三层结构管理内存:raw 是真正持有内存的基础类(用引用计数管理生命周期,不同子类分别用 malloc/mmap/posix_memalign/pipe 等方式申请空间);ptr 只是指向某个 raw 里一段偏移+长度的视图,本身不拥有内存;list 是多个 ptr 的有序集合,代表一段可能来自不同底层内存块、逻辑上连续的数据。这种”所有权与视图分离”的设计让拼接、切片大块数据时只需要操作 ptr/list,无需真正拷贝内存,是网络 IO、序列化场景做零拷贝的常见手法。

参考来源

《Ceph源码分析》第2章《Ceph通用模块》