我在 C++ 中为 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。
如果有人能解释这个现象。 谢谢
最佳答案
std::map
很可能实现为红黑树,这意味着以下字段,假设 x64:
- 红色或黑色(1 个 bool 值,但由于填充,实际上是 4 个字节)
- 父级(8 字节指针)
- 左 child ,右 child (两个 8 字节指针)
- 根对象(8 字节指针)
- 数据键(4 字节为 int)
- 数据值(int 为 4 个字节)
这会让您获得最多 44 个字节的每个项目或 44 兆字节的内存。也不同于 std::vector
的情况,其中每一个都是独立的对象,它添加了大约 24 字节的额外数据。这使我们达到 68 兆字节。这仍然是您所看到的四分之一,但至少您可以看出为什么尺寸存在巨大差异。
关于c++ - 使用 std::map 的内存爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729146/