《Folly库代码赏析》2):AtomicHashMap

  1. AtomicHashArray中通过将key强制转型为std::atomic*来实现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去避免不必要的内存浪费。

你可能感兴趣的:(c++)