什么是 Cow (Copy-on-write)

就是写入时复制,就是把真正的复制操作封装一下,读取的时候就不多占用空间了,这样可以减少复制的次数,提升程序性能。

Apple 自 iOS 10.3 和 macOS High Sierra 后使用的 APFS 就广泛应用了基于 COW 的增量存储策略,进一步增加了能用的存储空间。

Rust 标准库提供了对应的封装 std::borrow::Cow (Clone-on-write),然而默认的 String 不是 Cow 的。其他一些零开销的语言 (如 C++) 也都没有默认实现 Cow String,原因是平白增加了引用和检测成本 (比如用户可以用 data() 获取到指针然后写入)。

Ruby 的 Array#slice 默认是 Cow 的,这意味着如果只是截取一段数组出来,这并不会增加内存消耗,直到你开始编辑这个新数组,才会将这段数据真正拷贝一遍。