【发布时间】:2013-06-08 00:57:24
【问题描述】:
我正在编写一个程序,它为大型文档中的每一页生成缩略图。出于性能原因,我希望尽可能长时间地将缩略图保留在内存中,但我希望操作系统能够回收该内存,如果它决定它还有另一个更重要的用途(例如,用户已经开始运行不同的应用程序。)
如果记忆消失了,我总是可以稍后重新生成缩略图。
是否有任何跨平台方法可以将内存标记为需要时可以删除?该程序是用 C++ 编写的。
编辑:只是为了澄清,而不是在内存不足时收到通知或定期监视系统的内存量,我更多地考虑分配内存,然后在不使用时“解锁”它。然后操作系统可以在需要时窃取未锁定的内存(即使是磁盘缓冲区,如果它认为这样可以更好地利用内存),作为程序员,我所要做的只是在我打算使用之前再次“锁定”内存.如果锁定失败,我知道内存已被其他用途重用,因此我需要重新生成缩略图,如果锁定成功,我可以继续使用之前的数据。
原因是我可能会在屏幕上显示一个文档的 20 页,但我最好保留其他 200 页左右的缩略图,以防用户滚动一下。但是如果他们去做其他事情一段时间,那块内存可能会更好地用作磁盘缓存或存储网页或其他东西,所以我想能够告诉操作系统它可以重用我的一些内存,如果它想要。
必须监控系统范围内的可用内存量可能无法实现目标(我的内存永远不会被回收以改善磁盘缓存),并且获得低内存通知只会在紧急情况下有所帮助。我希望通过锁定/解锁方法,这可以以更轻量级的方式实现,并有利于系统在非紧急情况下的性能。
【问题讨论】:
-
只是为了澄清,而不是在内存不足时收到通知或定期监视系统的内存量,我更多地考虑分配内存,然后在何时“解锁”它它没有被使用。 除了在内存不足的情况下,释放内存有什么好处?如果内存不低,为什么操作系统/另一个应用程序不为自己的缓存目的占用更多空间?这似乎是过早优化的情况。
-
@ta.speot.is:假设你有 4GB RAM,而缩略图占用 1GB。然后有足够的可用内存,所以一切都很好。但是想象一下,您在一个只有 2GB RAM 的系统上。如果这是唯一运行的应用程序,则使用 1GB 的缩略图可能没问题,但由于可用内存非常少,如果操作系统可以收回整个 1GB,例如,如果您加载 Web 浏览器,那就太好了。跨度>
标签: c++ caching memory-management