Windows核心编程:第14章 探索虚拟内存
Github
https://github.com/gongluck/Windows-Core-Program.git
//第14章 探索虚拟内存.cpp: 定义应用程序的入口点。
//
#include "stdafx.h"
#include "第14章 探索虚拟内存.h"
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
//系统信息
SYSTEM_INFO sysinfo = { 0 };
GetSystemInfo(&sysinfo);
//获取逻辑处理器的详细信息
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pBuffer = nullptr;
DWORD dwSize = 0;
BOOL bRet = GetLogicalProcessorInformation(pBuffer, &dwSize);
DWORD lErr = GetLastError(); //ERROR_INSUFFICIENT_BUFFER;
pBuffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(dwSize);
bRet = GetLogicalProcessorInformation(pBuffer, &dwSize);
for (DWORD i = 0; i < dwSize / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION); i++)
{
pBuffer[i].Relationship == RelationProcessorCore ?
"指定的逻辑处理器共享一个处理器核心。ProcessorCore成员包含额外的信息。" : "";
pBuffer[i].ProcessorCore.Flags == 1 ?
"如果这个成员的值是1,那么由ProcessorMask成员的值来识别的逻辑处理器,就像在超线程或SMT中一样。否则,被识别的逻辑处理器不共享功能单元。" : "";
pBuffer[i].Relationship == RelationCache ?
"The specified logical processors share a cache. The Cache member contains additional information. " : "";
}
free(pBuffer);
pBuffer = nullptr;
//Windows 32-bit On Windows 64-bit (WOW64)
BOOL iswow = FALSE;
bRet = IsWow64Process(GetCurrentProcess(), &iswow);//只有32位程序运行在WOW64上时iswow才被置为TRUE。
//获取原来的系统信息(取代GetSystemInfo)
GetNativeSystemInfo(&sysinfo);
//虚拟内存状态
MEMORYSTATUSEX memstatusex = { 0 };//ex增强在支持4GB内存大小长度
memstatusex.dwLength = sizeof(memstatusex);
bRet = GlobalMemoryStatusEx(&memstatusex);
memstatusex.ullTotalPhys;//物理内存总量
memstatusex.ullAvailPhys;//可分配的内存总量
memstatusex.ullTotalVirtual;//进程私有空间大小
memstatusex.ullAvailVirtual;//进程闲置空间大小
//确定地址空间的状态
MEMORY_BASIC_INFORMATION info = { 0 };
lErr = VirtualQueryEx(GetCurrentProcess(), (LPCVOID)0x55, &info, sizeof(info));
switch (info.State)//State 用于指明所有相邻页面的状态。
{
case MEM_FREE://空闲状态。该区域的虚拟地址不受任何内存的支持。该地址空间没有被保留。该状态下AllocationBase、AllocationProtect、Protect和Type等成员均未定义。
break;
case MEM_RESERVE://指明页面被保留,但是没有分配任何物理内存。该状态下Protect成员未定。
break;
case MEM_COMMIT://指明已分配物理内存或者系统页文件。
break;
default:
break;
}
system("pause");
return 0;
}
Windows核心编程:第14章 探索虚拟内存的更多相关文章
- windows核心编程 第8章201页旋转锁的代码在新版Visual Studio运行问题
// 全局变量,用于指示共享的资源是否在使用 BOOL g_fResourceInUse = FALSE; void Func1() { //等待访问资源 while(InterlockedExcha ...
- windows核心编程 第5章job lab示例程序 解决小技巧
看到windows核心编程 第5章的最后一节,发现job lab例子程序不能在我的系统(win8下)正常运行,总是提示“进程在一个作业里” 用process explorer程序查看 ...
- Windows核心编程 第十七章 -内存映射文件(上)
第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...
- windows核心编程---第七章 用户模式下的线程同步
用户模式下的线程同步 系统中的线程必须访问系统资源,如堆.串口.文件.窗口以及其他资源.如果一个线程独占了对某个资源的访问,其他线程就无法完成工作.我们也必须限制线程在任何时刻都能访问任何资源.比如在 ...
- 《windows核心编程》 17章 内存映射文件
内存映射文件主要用于以下三种情况: 系统使用内存映射文件载入并运行exe和dll,这大量节省了页交换文件的空间以及应用程序的启动时间 开发人员可以使用内存映射文件来访问磁盘上的数据文件.这使得我们可以 ...
- Windows核心编程 第27章 硬件输入模型和局部输入状态
第27章 硬件输入模型和局部输入状态 这章说的是按键和鼠标事件是如何进入系统并发送给适当的窗口过程的.微软设计输入模型的一个主要目标就是为了保证一个线程的动作不要对其他线程的动作产生不好的影响. 27 ...
- Windows核心编程 第十七章 -内存映射文件(下)
17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该 ...
- Windows核心编程 第十一章 线程池的使用
第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是 ...
- Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)
7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...
随机推荐
- muduo 的windows下的编译
四处寻觅开源代码学习,适合的代码非常稀少,不适合的原因却千奇百怪. 不是使用语言特性过于老旧(c++03) 就是使用的冷僻语法(template<T> enable_share_from_ ...
- js Array 方法总结
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java线程池实例
目的 了解线程池的知识后,写个线程池实例,熟悉多线程开发,建议看jdk线程池源码,跟大师比,才知道差距啊O(∩_∩)O 线程池类 package thread.pool2; impor ...
- c#里如何实现讲一个字符串数组例如 “112,221”转化成两个字符串数组“112” “221” 中间以逗号隔开
比如是S [0]="123,223" S[1]="111,222" ....... 想转化为 SX[0]="123" SX[1]=" ...
- C# 使用 HttpPost 请求调用 WebService
之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最近发现还可以使用 Http 请求调用 WebService.这里还想说一句,还是 web api 的调用 ...
- mybatis学习四 mybatis的三种查询方式
<select id="selAll" resultType="com.caopeng.pojo.Flower"> select * from fl ...
- 在python中while
一.While循环 1.while循环格式 while 条件 : while循环体 当条件为Ture时,执行循环体,直到条件是假,停止循环. count = 1 # count 计数 一般用于计数 w ...
- 【转】ssh-copy-id帮你建立信任
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc. == 对于做运维的同学来说,给两台UNIX/Linux机器建立ssh信任关系是 ...
- Python10/22--面向对象编程/类与对象/init函数
类: 语法: class关键字 类名# 类名规范 大写开头 驼峰命名法class SHOldboyStudent: # 描述该类对象的特征 school = "上海Oldboy" ...
- idea如何将项目以eclipse保存
会生成 提交到svn eclipse 导入 首先使用TortoiseSVN下载要导入的项目 导入 已经存在的maven 项目 clean install -DskipTests t ...