什么是 Windows 内存管理中的待机列表
What is the standby list in Windows memory management?
Windows
中的内存管理方案非常复杂,我试图更好地理解它,以便我可以更准确地诊断内存问题。
例如,我们的C++应用程序(在SysInternal的Process Explorer中)显示1.4GB"虚拟大小",400MB"私有字节"和366MB"工作集"。
我做了一些研究,发现了这个问题:什么是专用字节、虚拟字节、工作集?
这是一本很棒的读物,但有些事情仍然没有加起来。具体来说,投票最高的答案指出虚拟字节包括备用列表。我不太确定这些是什么,我所做的任何研究都没有得到不友好的解释。我最大的问题是:将页面移动到备用列表如何影响应用程序的虚拟地址空间(如果有的话)?换句话说,虚拟大小比任何其他大小都大得多,差异是碎片内存吗?
如果有人能帮助我更好地理解这一点,我将不胜感激。提前感谢!
在一个简单的方案中,一段时间未使用的页面将从进程中删除,清除并放在空闲列表中,以便任何其他进程都可以在需要更多内存时使用它。
使用备用列表时,页面将从进程中删除,不修改,并放在备用列表中。如果相同的进程碰巧需要该页面,则会立即返回该页面。如果另一个进程需要更多内存,则会清除该页面并将其提供给该进程。
因此,简而言之,内存管理器会保留初始化的内存,以防最初使用它的进程想要它 - 但如果其他人想要更多内存,他们会得到它。
备用列表实际上是当前缓存的内存页列表,但可以丢弃这些页以便为其他应用程序释放内存。
鉴于此,将页面移动到备用列表不会影响应用程序的虚拟地址空间,因为进程不会认领列表中的内存,尽管进程能够在需要时快速回收它。
相关文章:
- 从C++本机插件更新Vector3数组
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- GCC本机矩阵运算库
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- 如何<double>通过TCP套接字将CLI 列表^发送到本机C++?
- Windows 正在获取待机内存C++
- 什么是 Windows 内存管理中的待机列表
- 当CPU处于挂起或待机状态时,一个定时条件变量(例如std::wait_for)会发生什么?
- c++ CLI - 本机/CLI C++:如何从向量转换为<class1_native>列表<class1_cli>