首页 > 系统相关 >win32 低内存通知事件

win32 低内存通知事件

时间:2024-06-23 09:00:49浏览次数:26  
标签:function 用量 通知 win32 内存 事件 物理

在 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 菜单进行搜索句柄表,如下图

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

参考文档:

标签:function,用量,通知,win32,内存,事件,物理
From: https://www.cnblogs.com/lindexi/p/18263040

相关文章

  • 动态内存分配(C++)
    什么叫动态分配?动态分配的优点动态分配的语法解释动态分配的变量动态分配的数组动态分配的结构体参考什么叫动态分配?形象来说,动态分配就像是在一个大型购物广场中,你根据需要随时租用或归还一个店铺。程序运行时,如果需要更多空间来存储数据,就会向操作系统“租用”内......
  • Linux开发讲课9--- Linux的IPC机制-内存映射(Memory Mapping)
            Linux的IPC(Inter-ProcessCommunication,进程间通信)机制是多个进程之间相互沟通的方法,它允许不同进程之间传播或交换信息。Linux支持多种IPC方式,包括但不限于:管道(Pipe):包括无名管道和命名管道(FIFO)。无名管道是半双工的,通常用于具有亲缘关系的进程间通信,如父子......
  • 从一到无穷大 #29 ByteGraph的计算,内存,存储三级分离方案是否可以通用化为多模数据库
    本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可。本作品(李兆龙博文,由李兆龙创作),由李兆龙确认,转载请注明版权。文章目录引言ByteGraph现有架构阿里云Lindorm腾讯YottaDB多模型化修改点ByteGraph论文中的优化点概述DynamicThrea......
  • C语言---动态内存管理
    1.为什么要有动态内存分配指针+结构体+动态内存管理是学习数据结构的非常重要的知识intmain(){intn=0;//向内存申请一块空间---一个整型4个字节intarr[10]={0};//向内存中申请一块连续的空间--10个整型--40个字节return0;}这两种但是上述......
  • golang如何使用指针灵活操作内存?unsafe包原理解析
    Hi你好,我是k哥。一个大厂工作6年,还在继续搬砖的后端程序员。我们都知道,C/C++提供了强大的万能指针void*,任何类型的指针都可以和万能指针相互转换。并且指针还可以进行加减等算数操作。那么在Golang中,是否有类似的功能呢?答案是有的,这就是我们今天要探讨的unsafe包。本文将深入探......
  • Xcode调试内存最新理解
    前提:Xcode16.0beta设置Scheme设置中勾选MallocScribble、MallocStackLogging。这么做是为了在MemoryGraph、Profile中追溯数据在哪句代码生成。此设置会导致App硬盘占用异常增多,调试完毕之后需要把选项关闭。Allocations许多人刚开始用它第一能看懂的是上方图......
  • python3使用pyVmomi获取vCenter中虚拟机cpu/内存信息
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]说明文章分享在Linux操作系统中安装python3环境,并通过pyVmomi获取vCenter中运行的虚拟机信息,最后把获取的虚拟机数据存储到数据库中。前三章为基础环境构建,第四章为脚本代码。环境软......
  • linux结束处于Tl状态的进程,释放内存资源
    原因是运行python结束时,用的ctrl+c不太行,尝试Ctrl+z,发现有时候管用。后面htop一看内存似乎没有释放掉。总结针对处在Tl状态的进程,用kill进程号没用,内存没有释放掉、进程没有关掉。用kill-CONT进程号解决,原理是发现SIGCONT信号,激活进程,然后就可以关掉了,内存也释放掉......
  • Python高效内存访问,memoryview这个神器你值得拥有!
    目录1、初识memoryview......
  • 深入理解和实现Windows进程间通信(共享内存)
    常见的进程间通信方法常见的进程间通信方法有:管道(Pipe)消息队列共享内存信号量套接字下面,我们将详细介绍共享内存的原理以及具体实现。什么是共享内存?Windows共享内存(SharedMemoryinWindows)是一种操作系统机制,允许不同的进程(程序)共享一段内存空间。这意味着多个进......