假设我有一个永久循环来创建哈希图:
void createMap() {
map<int, int> mymap;
for (int i = 0; i < INT_MAX; i++) {
mymap[i] = i;
}
mymap.clear(); // <-- this line doesn't seem to make a difference in memory growth
}
int main (void) {
while (1) {
createMap();
}
return 0;
}
我看着代码在 MacOS 上运行,看着事件监视器,无论是否使用 mymap.clear()
,该应用程序的内存使用量都在不断增长。末尾 createMap()
功能。对于
mymap.clear()
的情况,内存使用不应该是恒定的用来?使用 STL 数据容器的一般建议是什么?需要
.clear()
在功能结束之前?
最佳答案
我在另一个论坛上问过,那里的人帮助我理解了答案。事实证明,我没有等待足够长的时间退出 createMap
函数也没有足够的内存来维持这个程序。
需要创建 INT_MAX=2147483647 个元素,并且对于每个 map = 24 bytes
pair<int, int> = 8 bytes
的元素.
总最小内存 = 2.147483647^9 * 8 + 24 = 17179869200 bytes ~= 17.2 GB
.
我减小了元素的大小,并在使用和不使用 .clear()
的情况下进行了测试。该计划相应地扩大和缩小。
关于c++ - 理解 C++ 映射为什么不使用 clear() 释放堆内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63408667/