动手
前面各部分是读 bytes 的源码,这一部分反过来:不依赖 bytes,自己把共享主线和构建主线的骨架写一遍。写完再回头看,STATIC_VTABLE 为什么能让静态数据零分配、data 为什么要是 AtomicPtr、promote_to_shared 为什么先分配再拼回 Vec,都会变成你自己做过的选择。
- 从零写一个最小 Bytes:264 行的库。
Bytes是四个字加一张只有clone和drop的表,支持'static和「Vec加原子计数」两种存储、clone、slice、drop;BytesMut用data的最低位区分KIND_VEC和KIND_ARC,支持advance、split_to、freeze。和 bytes 跑同一串操作,分配次数只在可提升存储那几步不同。代码应在 miri 下检查,本机没装 miri,没有跑过。
flowchart TB vt["两函数的 vtable"] --> st["'static:零分配"] vt --> sh["共享:原子计数"] sh --> sl["clone 与 slice"] bm["BytesMut 的 data 位"] --> sp["split_to:提升"] sp --> fz["freeze:换表"] fz --> sh sl --> cmp["和 bytes 比分配"]
💬 关联讨论
发起讨论加载中...