乐趣区

关于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 去防止不必要的内存节约。

退出移动版