Windows核心编程 第十四章 虚拟内存
第1 4章 虚 拟 内 存
<这一章没啥,是说的几个内存相关的函数 >
14.1 系统信息
许多操作系统的值是根据主机而定的,比如页面的大小,分配粒度的大小等。这些值决不应该用硬编码的形式放入你的源代码。相反,你始终都应该在进程初始化的时候检索这些值,并在你的源代码中使用检索到的值。G e t S y s t e m I n f o函数将用于检索与主机相关的值:VOID WINAPI GetSystemInfo(_Out_ LPSYSTEM_INFO lpSystemInfo);
必须传递S Y S T E M _ I N F O结构的地址给这个函数。这个函数将初始化所有的结构成员然后返回。下面是S Y S T E M _ I N F O数据结构的样子。
当系统引导时,它要确定这些成员的值是什么。对于任何既定的系统来说,这些值总是相同的,因此决不需要为任何既定的进程多次调用该函数。由于有了 G e t S y s t e m I n f o函数,因此应用程序能够在运行的时候查询这些值。在该结构的所有成员中,只有 4个成员与内存有关。表1 4 - 1对这4个成员作了描述。
14.2 虚拟内存的状态
Wi n d o w s函数G l o b a l M e m o r y S t a t u s可用于检索关于当前内存状态的动态信息:
MEMORYSTATUS mst = {sizeof(mst)};
GlobalMemoryStatus(&mst);
我本机是16G内存,用上面的那个函数会出问题,得到的数据溢出了,超过4G内存的需要用下面的函数来获取内存状态信息。
MEMORYSTATUSEX mst2 = {sizeof(mst2)};
GlobalMemoryStatusEx(&mst2);
大致可以获取的内容是CPU使用率,计算机内存大小,虚拟内存大小等相关信息。
14.3 确定地址空间的状态
Wi n d o w s提供了一个函数,可以用来查询地址空间中内存地址的某些信息(如大小,存储器类型和保护属性等)。实际上本章后面显示的V M M a p示例应用程序就使用这个函数来生成第1 3章所附的虚拟内存表交换信息。这个函数称为Vi r t u a l Q u e r y:
Wi n d o w s还提供了另一个函数,它使一个进程能够查询另一个进程的内存信息:
这两个函数基本相同,差别在于使用 Vi r t u a l Q u e r y E x时,可以传递你想要查询的地址空间信息的进程的句柄。调试程序和其他实用程序使用这个函数最多,几乎所有的应用程序都只需要调用Vi r t u a l Q u e r y函数。当调用Vi r t u a l Q u e r y(E x)函数时,p v A d d r e s s参数必须包含你想要查询其信息的虚拟内存地址。 P m b i参数是你必须分配的M E M O RY _ B A S I C _ I N F O R M AT I O N结构的地址。该结构在Wi n N T. h文件中定义为下面的形式:
最后一个参数是 d w L e n g t h,用于设定 M E M O RY _ B A S I C _ I N F O R M AT I O N结构的大小。Vi r t u a l Q u e r y(E x)函数返回拷贝到缓存中的字节的数量。
根据在p v A d d r e s s参数中传递的地址,Vi r t u a l Q u e r y(E x)函数将关于共享相同状态、保护属性和类型的相邻页面的范围信息填入 M E M O RY _ B A S I C _ I N F O R M AT I O N结构中。表1 4 - 3描述了该结构的成员。
本章的剩余部分就是在说作者自己封装的一个函数VMQuery,可以更详细的获取内存信息。
该结构的其他成员与内存管理毫无关系,为了完整起见,下面也对它们进行了介绍(见表1 4 - 2)。
Windows核心编程 第十四章 虚拟内存的更多相关文章
- Windows核心编程 第十五章 在应用程序中使用虚拟内存
第1 5章 在应用程序中使用虚拟内存 Wi n d o w s提供了3种进行内存管理的方法,它们是: • 虚拟内存,最适合用来管理大型对象或结构数组. • 内存映射文件,最适合用来管理大型数据流(通常 ...
- Windows核心编程 第十九章 DLL基础
第1 9章 D L L基础 这章是介绍基本dll,我就记录一些简单应用,dll的坑点以及扩展后面两章会说,到时候在总结. 自从M i c r o s o f t公司推出第一个版本的Wi n d o w ...
- Windows核心编程 第十二章 纤程
第1 2章 纤 程 M i c r o s o f t公司给Wi n d o w s添加了一种纤程,以便能够非常容易地将现有的 U N I X服务器应用程序移植到Wi n d o w s中.U N I ...
- 【windows核心编程】 第六章 线程基础
Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ① 一个是线程的内核 ...
- Windows核心编程:第4章 进程
Github https://github.com/gongluck/Windows-Core-Program.git //第4章 进程.cpp: 定义应用程序的入口点. // #include &q ...
- Windows核心编程:第14章 探索虚拟内存
Github https://github.com/gongluck/Windows-Core-Program.git //第14章 探索虚拟内存.cpp: 定义应用程序的入口点. // #inclu ...
- Windows核心编程 第十八章 堆栈
第1 8章 堆 栈 对内存进行操作的第三个机制是使用堆栈.堆栈可以用来分配许多较小的数据块.例如,若要对链接表和链接树进行管理,最好的方法是使用堆栈,而不是第 1 5章介绍的虚拟内存操作方法或第1 7 ...
- Windows核心编程 第2 4章 异常处理程序和软件异常
异常处理程序和软件异常 C P U引发的异常,就是所谓的硬件异常(hardware exception).操作系统和应用程序 也可以引发相应的异常,称为软件异常(software exception) ...
- Windows核心编程:第11章 Windows线程池
Github https://github.com/gongluck/Windows-Core-Program.git //第11章 Windows线程池.cpp: 定义应用程序的入口点. // #i ...
随机推荐
- 为什么要用Spring Boot?
什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而 ...
- roarctf_2019_realloc_magic
目录 roarctf_2019_realloc_magic 总结 题目分析 checksec 函数分析 解题思路 初步解题思路 存在的问题 问题解决方案 最终解决思路 编写exp exp说明 roar ...
- Hibernate 组合查询+分页
MVC模型:Hibernate+Struts2 dao层: public List<UserBean> searchList(UserBean uBean,int pageIndex,in ...
- Spring如何解决循环依赖
一.什么是循环依赖 多个bean之间相互依赖,形成了一个闭环. 比如:A依赖于B.B依赖于c.c依赖于A 通常来说,如果问spring容器内部如何解决循环依赖, 一定是指默认的单例Bean中,属性互相 ...
- 新的颜色对比度算法-感知对比度算法APCA
目录 对比度 在控制台查看 插件或网站 感知对比度算法(APCA) APCA Math 原理 js 实现的 SAPC 最后 灵感的源泉来源于不断的接受新鲜事物. Chrome 89 新功能一览,性能提 ...
- IntelliJ IDEA安装lombok
1. 搜索Plugins 点击下方的Browse repositories.. 2.点击安装,重新启动
- 文本编辑工具 Vim与压缩打包
vim一共有3种模式:一般模式.编辑模式和命令模式 一般模式下的移动光标 光标向左移动:h或者向左的方向键 光标向右移动:l或者向右的方向键光标向上移动:k或者向上的方向键光标向下移动:j或者向下的方 ...
- 从键盘读入学生成绩,找出最高分, 并输出学生成绩等级(Java)
从键盘读入学生成绩,找出最高分, 并输出学生成绩等级 一.题目 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10 等级为'A' 成绩>=最高分-20 等级为'B' ...
- SFDC 利用Schema.Describe来取得Picklist所有的选项
Salesforce的开发语言Apex与Java极为类似.也有封装,基础,多态特性. 并且也能 反射,Object的属性和Field属性. 今天主要记录的是一个需求:Visualforce Page或 ...
- 软件工程第一次作业:Warm Up
Warm Up 项目 内容 作业所属课程 2021春季软件工程(罗杰 任健) 作业要求 第一次阅读作业 课程目标 培养通过团队协作使用软件开发工具按照软件工程方法开发高质量并且可用的复杂软件系统的能力 ...