Rust in Everything
基于 bytes 1.12.1

设计取舍

前面各部分按类型、按文件读,每一页讲清一个机制。这一部分换个角度:把散在各页里的取舍收拢起来,按「选了什么、换来了什么、付出了什么、代价由谁来补」排好。这里不重讲机制,每条都链回讲过它的那一页;数字都来自那些页的实验,出处都是 bytes 自己的源码、文档、PR 和 issue。

  1. 取舍汇总:六个决定。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"]

💬 关联讨论

发起讨论
加载中...