设计取舍
前面各部分按类型、按文件读,每一页讲清一个机制。这一部分换个角度:把散在各页里的取舍收拢起来,按「选了什么、换来了什么、付出了什么、代价由谁来补」排好。这里不重讲机制,每条都链回讲过它的那一页;数字都来自那些页的实验,出处都是 bytes 自己的源码、文档、PR 和 issue。
- 取舍汇总:六个决定。
Bytes用一张手写的 vtable 容纳五种存储(换来的是零分配和可 CAS 的data,不是更小的结构体);Vec转来的缓冲等到第一次 clone 才分配引用计数;BytesMut把形态、原始容量和偏移塞进data一个字;切片共享整块分配;Buf/BufMut把游标和存储分开;chunk_mut交出UninitSlice。
flowchart TB vt["手写 vtable"] --> promo["可提升存储"] promo --> bits["data 的位编码"] bits --> share["切片共享整块"] share --> cursor["游标与存储分开"] cursor --> uninit["UninitSlice"]
💬 关联讨论
发起讨论加载中...