这个问题困扰了我好多天了。
因为程序有些复杂,是嵌套了三层结构的map<int, map<int, vector<int>> a; 这种。
开始犯的错误是参数传递的时候没有形参,导致每次都复制一份,内存使用飙升。然后以为没有释放干净,用Valgrind查不出问题。
后来改了形参内存不飙升了,但是不释放也很头疼。
前面有人提出我为什么用vector<int> *a。也是为了测试主动delete a有没有效果,结果一样无效。
我的程序是反复做一个大型的模拟,因为有随机变量在里面,每次模拟所需要的内存从几M到几十G不等,要做几万个模拟,需要几个进程同时跑来加速,进程之间靠log文件来判断模拟是否已经跑完。
结果就是跑10个进程,开始的时候大家都占了几百兆的内存,很和谐。然后忽然某个进程占了10G内存不释放(其实只有极少数的模拟会这样),系统内存吃紧,再后来就是大家都占10几G内存,机器就崩了。
我测试了各种方案,包括delete,swap,erase+shrink_to_fit,完全无效。就差自己实现map了。
你这一个函数直接解决了我大问题,看来我获取知识的能力还有欠缺。
【 在 jackhu123 (cpp程序员) 的大作中提到: 】
: 赞反馈,
: 互相学习
--
FROM 159.226.67.*