win32 低内存通知事件

news/2024/6/30 18:16:43

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

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

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

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

MHandles[kLowMemoryNotification] =CreateMemoryResourceNotification(LowMemoryResourceNotification);

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

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

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

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

  • HighCommitCondition: 如果提交用量接近最大提交限制,即内存用量非常大,物理内存或页面文件中可用空间极为有限,且系统无法增加页面文件的大小,将设置此事件。换句话就是内存用多了,能释放的话赶紧释放

  • LowCommitCondition: 当提交用量相对于当前提交限制较低,即内存用量低,且物理内存或页面文件存在大量可用空间时,将设置该事件。换句话说就是现在豪气,随便用

  • HighMemoryCondition: 当空闲物理内存数量超过预设值时将设置该事件

  • LowMemoryCondition: 当空闲物理内存数量低于预设值时将设置该事件

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

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

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

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

参考文档:

  • CreateMemoryResourceNotification function (memoryapi.h) - Win32 apps Microsoft Learn
  • QueryMemoryResourceNotification function (memoryapi.h) - Win32 apps Microsoft Learn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/48529.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

RSpromoter:基于视觉模型的遥感实例分割提示学习

RSpromoter:基于视觉模型的遥感实例分割提示学习 摘要-利用来自SA-1B的大量训练数据,分段任意模型(SAM)展示了显著的泛化和零样本能力。然而,作为一种与类别无关的实例分割方法,SAM在很大程度上依赖于先前的手动指导,包括点、框和粗粒度掩码。此外,它在遥感图像分割任务…

ABC359 G - Sum of Tree Distance

题目链接 题目大意 给出一棵树,树上每个节点都有一种颜色,求所有颜色相同的节点两两之间距离的总和。 题解 想来写题解主要是看了一下官方解法都写的需要“重心分解”,应该是对应中文语境下的树的点分治。实际上点分治写起来很费事,可以用启发式合并替代。 具体来说,dfs时…

Spring Boot

第一个SpringBoot应用 项目结构根package:com.zyj.learnSpringBoot要求main()方法所在启动类放在根package下Application @SpringBootApplication public class Application {public static void main(String[] args) throws Exception {SpringApplication.run(Application.cl…

算法流程图

算法流程图 一. 有一个处理单价为2元饮料的自动售货机软件,该软件负责控制两个LED显示灯(红,绿)和控制饮料的送出。待机状态,显示红灯。若投入2元硬币,LED绿灯闪烁,之后按下“可乐”、“雪碧”或“红茶”按键,显示绿灯,相应的饮料就送出来。画出该过程的流程图 分析:…

Linux 中 根据SRA号获取下载链接

001、使用srapath命令[root@PC1 test2]# srapath SRR1482463 https://sra-pub-run-odp.s3.amazonaws.com/sra/SRR1482463/SRR1482463 [root@PC1 test2]# srapath SRR1770413 https://sra-pub-run-odp.s3.amazonaws.com/sra/SRR1770413/SRR1770413 。

.Net Aspire初体验

Aspire今天参加了Post Microsoft Build & AI Day深圳的集会,众多大佬分享了非常优质前沿的技术和实践,实在受益良多,为了消化吸收关于张队分享的.Net Aspire的内容,特实操一遍小示例并记录如下: 1、以VS2022为例,先升级到最新的版本v17.10.3,新建.NET Aspire Starte…

万象革新,开启鸿蒙原生应用生态新篇章

摘要:星河璀璨,加入鸿蒙正当时。鸿蒙生态应用分发带来新流量、新服务、新能力,携手开发者实现技术生态和价值回报的双赢。 在当下,包括智能手机、平板电脑和穿戴设备在内的华为终端产品连接了亿万用户。这一市场覆盖优势使得自2019年鸿蒙系统首次发布以来,其生态用户基数便…

可能是全网最适合入门的面向对象编程教程:Python实现-嵌入式爱好者必看!

为了帮助初学者更好地理解和应用面向对象的设计方法,本文档更加深入地探讨其背后的原理和特点,并结合实际案例来展示其在实际开发中的应用价值。本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向…