c++ - 分配可由操作系统释放的内存(如果需要)

标签 c++ caching memory-management

我正在编写一个程序,为大型文档中的每一页生成缩略图。出于性能原因,我希望尽可能长时间地将缩略图保留在内存中,但我希望操作系统能够回收该内存,如果它决定它有另一个更重要的用途(例如,用户已经开始运行不同的应用程序。)

如果内存消失了,我总是可以稍后重新生成缩略图。

是否有任何跨平台的方法可以将内存标记为需要时可以删除?该程序是用 C++ 编写的。


编辑:只是为了澄清,而不是在内存不足时收到通知或定期监视系统的内存量,我更多地考虑分配内存然后在不使用时“解锁”它。然后,如果需要,操作系统可以窃取未锁定的内存(如果它认为可以更好地使用内存,甚至可以用于磁盘缓冲区),作为程序员,我所要做的就是在我打算使用它之前再次“锁定”内存.如果锁定失败,我知道内存已被重新用于其他用途,因此我需要再次重新生成缩略图,如果锁定成功,我可以继续使用之前的数据。

原因是我可能会在屏幕上显示 20 页文档,但我也可能会保留其他 200 多页的缩略图,以防用户稍微滚动一下。但是,如果他们暂时去做其他事情,那么该内存可能更适合用作磁盘缓存或用于存储网页或其他东西,所以我希望能够告诉操作系统它可以重用我的一些内存,如果它想要。

必须监视整个系统的可用内存量可能无法实现目标(我的内存永远不会被回收以提高磁盘缓存),并且获得内存不足通知只会在紧急情况下有所帮助。我希望通过锁定/解锁方法,这可以以更轻量级的方式实现,并在非紧急情况下有利于系统的性能。

最佳答案

Is there any cross-platform method for flagging memory as can-be-removed-if-needed? The program is written in C++

至少对于 Windows,您可以 register for a memory resource notification .

HANDLE WINAPI CreateMemoryResourceNotification(
  _In_  MEMORY_RESOURCE_NOTIFICATION_TYPE NotificationType
);

NotificationType

  • LowMemoryResourceNotification Available physical memory is running low.
  • HighMemoryResourceNotification Available physical memory is high.

请小心响应这两个 事件。您可以创建一个反馈循环(内存不足,释放缩略图!然后内存高,制作所有缩略图!)。

关于c++ - 分配可由操作系统释放的内存(如果需要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994947/

相关文章:

c++ - 如何检查用户输入是否有效? (C++)

c++ - Hook WH_CALLWNDPROC 后未获取窗口过程消息

javascript - Angular 7 Service Worker缓存音频文件导致Safari出现范围 header 问题

.net - 使用 .net 缓存提供程序类在数据库中的 Web 服务器上缓存数据库查询结果

c - 如何找到 malloc 调用实际使用了多少内存?

mysql - Mysqli导致内存使用情况

c++ - 在 C++ 中读取 BMP 奇怪的行为

通过 Memcache 的 Django session : Cannot find session key manually

docker - Docker不会从失败的dockerfile构建中释放内存

c++ - 如何在 Visual Studio 中使用 GoogleMock?