前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >win32 低内存通知事件

win32 低内存通知事件

作者头像
林德熙
发布2024-06-23 11:28:37
470
发布2024-06-23 11:28:37
举报
文章被收录于专栏:林德熙的博客林德熙的博客

在 Windows 机制里面,将在物理内存、换页池、非换页池以及提交用量很多或很少时,向用户模式进程和内核模式驱动程序提供通知。本文将重点放在用户模式的进程上

本文属于读 《深入解析 Windows 操作系统》 读书笔记

应用程序可以调用 CreateMemoryResourceNotification function 函数指定自己期望接收到内存多或内存少的通知

如在 dotnet 的 CLR 层的 finalizerthread 部分,就使用了以下代码进行获取通知

代码语言:javascript
复制
MHandles[kLowMemoryNotification] =
        CreateMemoryResourceNotification(LowMemoryResourceNotification);

以上的参数的 LowMemoryResourceNotification 表示的是可用物理内存不足。对应的还有 HighMemoryResourceNotification 表示可用物理内存很高

配合 QueryMemoryResourceNotification function 可以进行查询当前的内存状态

使用例子代码请参阅 https://stackoverflow.com/a/54529790 提供的例子

另一个方面则是通过以下内存管理器的通知事件获取通知

  • HighCommitCondition: 如果提交用量接近最大提交限制,即内存用量非常大,物理内存或页面文件中可用空间极为有限,且系统无法增加页面文件的大小,将设置此事件。换句话就是内存用多了,能释放的话赶紧释放
  • LowCommitCondition: 当提交用量相对于当前提交限制较低,即内存用量低,且物理内存或页面文件存在大量可用空间时,将设置该事件。换句话说就是现在豪气,随便用
  • HighMemoryCondition: 当空闲物理内存数量超过预设值时将设置该事件
  • LowMemoryCondition: 当空闲物理内存数量低于预设值时将设置该事件

如果要查看内存资源通知事件,可以运行微软极品工具箱的 WinObj 工具,查看 KernelObjects 文件夹里面的大内存和小内存事件,如下图所示

双击即可看到对应的对象产生了多少句柄和引用

如果想要了解系统中有哪些进程请求了内存资源通知,可以使用 Process Explorer 的 Find 菜单进行搜索句柄表,如下图

更详细内容请大家自行阅读书籍

参考文档:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档