初始为空的std::unordered_map会占用多少内存?
std::unordered_map默认构造后的内存分配情况
C++标准并没有硬性规定std::unordered_map在默认构造(未存入任何元素)时的动态内存分配量,具体行为完全依赖于你使用的STL实现:
- 多数主流实现(例如GNU libstdc++)在默认构造时不会预先分配用于存储元素或桶的动态内存,此时容器仅占用自身成员变量的内存——比如指向桶数组的指针、记录大小/负载因子的计数器、哈希函数与相等比较器的实例等,这部分内存通常是固定的小尺寸(几十字节级别)。
- 部分实现可能会初始化一个最小规模的桶结构(比如LLVM libc++可能默认创建一个空桶数组,或分配1个桶的内存),但这部分开销同样极小,远未达到可用于存储元素的量级。
总而言之,在存入第一个元素之前,std::unordered_map的内存开销几乎就是容器自身的结构体大小,没有为元素存储分配动态内存。
内容的提问来源于stack exchange,提问作者Isaac D. Cohen
相关产品推荐
相关产品推荐

