Folly SparseByteSet详解
缘起
如果对stl的bitset有所了解的话,那么SparseByteSet是比bitset的性能更强的一个替代物。这里首先简要回顾一下bitset的功能。bitset可以认为是一个bool的静态数组,stl也有一个bool的动态数组版本,即元素类型特化为bool的vector<bool>,他们都用一个bit来存储每个bool类型,这样子1个byte的空间可以存储8个bool类型,从而大大提升空间效率。但是,bitset想C/C++的原生数组一样,空间是在初始化的时候预先分配好的,不能在后续动态扩展。
SparseByteSet和bitset一样也是一个静态的bool数组。但是它针对特殊场景,进行了性能优化,首先程序对空间不敏感;其次程序应用的场景只有插入和查询操作,没有更新和删除操作;再次主要在栈上使用这个bool数组。那么为什么叫SparseByteSet呢,Sparse是“稀疏的”意思,透露出它是用稀疏byte数组的方式来存储bool值。
针对上面描述的两个场景,SparseByteSet设计得是如此简单,简单到除了构造函数,只有两个方法,add和contains,没有任何多余的地方,非常轻量级。