在最近的项目中,使用了stl unordermap。当map中存储的key数量增加到6倍-7倍甚至8倍时,unordermap的插入接口的性能会出现严重的瓶颈。随着插入元素数量的增加,在插入过程中会发生冲突。冲突开放到一定的阈值,触发存储桶的增加,从而触发rehash。打印bucket_size可以看到存储桶大小一直在增加,这是非常昂贵的。下面是测试代码: int
当插入到map中时,我无法捕获分配内存的失败,这会由于分段错误而导致崩溃。struct Data int64_t arr[100000000000000000]; // Large data to cause allocation failure {}
如果我们使用malloc,它将返回一个空,而new抛出std::bad_alloc,这是可以捕获的。然而,需要分