Skip to content

Generation 理解

先从 handle 继续展开 —— 假设我们通过一个 handle 定位到了 0x0001 这个位置(当然,不一定是真的指一块内存地址),然后可以爽使用,在 manager 进行释放这块空间之后,那么当前这个 handle 应当失效,可是如果此时我们重新申请了一个空间刚好就是 0x0001 这个位置,往里面写了新的数据.那么旧的 handle 就重“重新”变成了一个有效的 handle 可以进行数据的访问.

这很坏,所以会引入 generation 这个字段来进行区分 —— 即使我们使用的是同一个 handle,但是如果现在那个 slot 的 generation 和我的不一致,说明依旧我持有的是 invalid handle

(这有一点像是并发当中我们遇到的 「ABA 问题」

总之可以理解成在单纯比对 index 的时候加上版本号来进行检查,总之就是加一个字段来进行判断(

Released under the MIT License.