Windows CE中的内存不足通知

时间:2012-03-26 15:26:49

标签: c++ memory-management windows-ce windows-mobile-6.5 windows-messages

当可用内存低于某个限制(用户可配置)时,是否有办法获取通知?我查看了WM_HIBERNATE事件,但似乎此事件的限制不是用户可配置的,并且是硬编码的(160KB ??)。 我能想到的唯一方法是通过GlobalMemoryStats()API定期轮询操作系统(每5秒钟一次)获取可用内存,如果可用内存低于用户配置的限制,则向用户发出一个事件。还有更好的方法吗?

此通知必须适用于以Windows CE 5.0开头的设备。 Windows Mobile 6.5

2 个答案:

答案 0 :(得分:2)

操作系统中没有什么固有的东西可以告诉你内存低于任意级别,没有。您可以在应用程序中进行轮询或创建为您执行此操作的服务/驱动程序,这是最佳方式。哪个“更好”取决于是否只有一个流程需要了解通知。

答案 1 :(得分:2)

如果这是你的应用程序可以耗尽内存,那么你可以实现一些代码来拦截这种低内存情况,然后系统才会这样做。一些提示:

  • 覆盖你的新的malloc或任何其他分配内存的函数,每次检查分配是否会耗尽内存。

  • 如果你害怕你会减慢你的应用程序(你应该:))然后使用一些内存管理器,如Dougs Lee malloc.c,你可以修改是这样每次它从系统抓取另一个64KB块内存,你将检查系统内存是否不是太低

  • 你可以从注册表中读取什么是低内存级别,你会发现这些条目:WLC的HKLM \ System \ Hibernate和WM的HKLM \ System \ OOM。

http://msdn.microsoft.com/en-us/library/ms911907.aspx