我前面有介绍了两种实现 cow 的方式啊。一种是类似于 Qt 的 QString, QByteArray 这些数据结构使用的,它其实就是个 shared_ptr<> d,读这个数据结构之前,拿住引用。那么写数据结构之前 memcpy() 复制一份内容,修改完修改这个 shared_ptr<> d 不会影响读。
另外一种是使用 b-tree,这种数据结构能够做到 cow 修改。所以普通地被各种数据库使用。rust 使用 b-tree 来实现 treemap,而 c++ 则是使用 rb tree,python 使用 hash table.
上次有人测过,说 btree map 的数据局部性更好,对 cpu cache 更友好,运行效率更快。不知道是不是真的。
【 在 ylh1969 的大作中提到: 】
: cow是个难题,我也没想好怎么弄COW。
--
修改:hgoldfish FROM 110.84.123.*
FROM 110.84.123.*