使用std :: map爆炸内存

时间:2016-04-19 20:47:00

标签: c++ visual-studio-2010 dictionary memory stl

我在使用C ++ for VS10中的std :: map时遇到了问题。 当我运行这个简单的代码时

std::map<int,int>myMap;
for(size_t i=0;i<1000000;i++){
     myMap[i]=i;
}

我的记忆爆炸到了256Mo,这对我来说似乎很奇怪。 如果我使用

std::vector<int>myVector(1000000);

我按预期获得4Mo。

如果有人能解释这种现象。 谢谢

1 个答案:

答案 0 :(得分:2)

std::map可能实现为红黑树,这意味着以下字段,假设x64:

  1. 红色或黑色(1布尔值,但由于填充有效4个字节)
  2. 父(8字节指​​针)
  3. 左子,右子(两个8字节指针)
  4. 根对象(8字节指​​针)
  5. 数据密钥(int为4个字节)
  6. 数据值(int为4个字节)
  7. 每个项目最多可达44个字节或44 MB内存。与std::vector情况不同,它们中的每一个都独立地是一个对象,它增加了大约24个字节的附加数据。这带来了68兆字节。这仍然是你所看到的四分之一,但至少你可以看出为什么尺寸存在巨大差异。