关于c++:Folly库代码赏析2AtomicHashMap

  1. AtomicHashArray中通过将key强制转型为std::atomic<KeyT>*来实现key的原子操作。
  2. 为了防止低廉操作,如通过stringpiece查找stringAtomicHashMap提供了转换函数容许提供可转换位key的查问参数,即便不是同一类型,也能够比拟二者是否相等。
  3. AtomicHashMap的插入操作:

    1. primary AtomicHashArray中插入
    2. 如果已满,调配sub map并插入
  4. 底层调配策略:

    //   if subMap == 0 (primary map) =>
    //     bit(s)          value
    //         31              0
    //       0-30  submap offset (index_ret input)
    //
    //   if subMap > 0 (secondary maps) =>
    //     bit(s)          value
    //         31              1
    //      27-30   which subMap
    //       0-26  subMap offset (index_ret input)

    底层调配是1个primary map + N个sub map

    总和容量实际上是和2个primary map统一的,为了防止内存节约,通过溢出时再调配多个sub map去防止不必要的内存节约。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理