我有一个大约需要20 MB内存的应用程序。在一个很少使用的算法中,它(std :: vector)临时分配250 MB。解除分配后,systemmonitor仍会显示此用法。如何将内存释放回系统?
答案 0 :(得分:4)
你不能,也不应该。
虚拟内存分配很复杂,只需在系统监视器中查看数字就无法充分理解。它可能看起来好像一个进程使用的内存比它应该多,但这只是虚拟内存寻址工作方式的假象。
请放心,如果您已正确释放此内存,并且操作系统确实需要它,则会重新分配。
此处唯一真正可操作的要点是停止使用系统监视器,就好像它是您的进程正在使用的物理RAM的准确度量一样!
答案 1 :(得分:4)
使用mmap()或VirtualAlloc()分配和释放内存。这会立即将其返回给操作系统。
为了与std :: vector一起使用,你需要为它提供一个std :: allocator。您可能会发现更容易手动滚动自己的向量w / placement new和direct析构函数调用。
通常,系统堆分配器会为您正确处理;但是看起来你发现了一个他们没有的情况。