进程A中有个C++写的计算函数,有几亿次的new和delete的小内存操作,内存占用的峰值是36G。
函数执行完之后,new和delete的次数是一样的,说明所有的内存都释放了,不存在泄漏,然而资源管理器里面看到程序的内存占用仍然是36G。
更奇怪的是,再次执行这个函数很多次,内存占用还是36G,而不会增加。
这似乎说明了Windows的内存释放是假装的?
更多测试:
1 如果减少计算规模,占用内存峰值不超过10G,那么计算函数执行完成后,内存占用会立即回到0G。
2 如果开启另一个进程B开始计算,那么进程A占用的36G内存(虽然代码里面已经释放,只是资源管理器说它占了36G)才会被逐渐被windows回收,进程B占用的内存会回到36G(虽然实际上进程B已经把内存全部释放了,不占用内存了,但是资源管理器里面会显示36G)。
3 win7和win10的现象是一样的。
--
修改:bn95 FROM 111.48.114.*
FROM 111.48.114.*