【发布时间】:2016-04-19 20:46:59
【问题描述】:
在 VS10 的 C++ 中使用 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 和 std::vector 实现的区别吧?
-
节点大小可能是 (parentptr, leftptr, rightptr, color, key, value),所以每个 ~8+8+8+1+padding+4+4+padding=40bytes。为 Windows 中的分配开销添加约 24 个字节会导致每个节点总共有约 64 个字节,x1000000 = 61Mb。嗯。对于未使用的页面分配,我只希望看到大约 4Mb。不确定其他 200Mb 来自哪里。
-
您确定它是 256 Mb,而不是 25.6?对于一百万个节点的映射,我预计会略低于 24 Mb,即值 4,节点 4,左右指针 8+8。
-
你如何测量内存使用情况?
标签: c++ visual-studio-2010 dictionary memory stl