windows学习笔记之探索虚拟内存
一、 获取系统信息
我们可以调用系统信息获取函数来获得本系统的页面大小、分配粒度的大小等信息。
系统信息获取函数:
VOID GetSystemInfo(LPSYSTEM_INFO psinf);
参数类型:
LPSYSTEM_INFO psinf 用于返回系统信息的数据结构
所包含信息:
dwPageSize:CPU页面的大小
lpMinimumApplicationAddress:进程可用的地址空间中的最小地址
lpMaximumApplicationAddress:进程可用的地址空间中的最大地址
dwAllocationGranularity:保留的地址空间区域的分配粒度
dwNumberOfProcessors:计算机中CPU的数目
dwActiveProcessorMask:用于指明那个CPU是活动的
wProcessorArchitecture:处理器结构
wProcessorLevel:更详细的处理器结构
wProcessorRevision:更详细的处理机级别
验证程序:
#include <iostream>
#include <windows.h>
using namespace std;
void main()
{
/*获取进程信息*/
LPSYSTEM_INFO systemInfo = new SYSTEM_INFO();
GetSystemInfo(systemInfo);
cout << "Page Size :" << systemInfo->dwPageSize << endl;
cout << "Allocation Granularity : " << systemInfo->dwAllocationGranularity << endl;
cout << "Minimum application address : " << systemInfo->lpMinimumApplicationAddress << endl;
cout << "Maxmum application address : " << systemInfo->lpMaximumApplicationAddress << endl;
cout << "Number of processors : " << systemInfo->dwNumberOfProcessors << endl;
cout << "Active processor mask : " << systemInfo->dwActiveProcessorMask << endl;
cout << "Processor architecture : " << systemInfo->wProcessorArchitecture << endl;
cout << "Processor level : " << systemInfo->wProcessorLevel << endl;
cout << "Processor revision : " << systemInfo->wProcessorRevision << endl;
cout << endl;
system("pause");
}
输出结果:
Page Size :4096
Allocation Granularity : 65536
Minimum application address : 00010000
Maxmum application address : 7FFEFFFF
Number of processors : 2
Active processor mask : 3
Processor architecture : 0
Processor level : 6
Processor revision : 3846
二、 查看虚拟内存状态
我们可以通过相关函数检索当前内存状态的动态信息。
获取函数:
GlobalMemoryStatus(LPMEMORYSTATUS pmst); /*内存小于4G*/
GlobalMemoryStatusEx(LPMEMORYSTATUSEX pmst); /*内存大于4G或合计交换文件大小大于4G*/
函数参数:
LPMEMORYSTATUS pmst:用于返回信息的数据结构
LPMEMORYSTATUSEX pmst:用于返回信息的数据结构
包含信息:
dwLength:参数结构体的字节数
dwTotalPhys:物理存储器的总字节数
dwAvailPhys:可供分配的物理存储器的总字节数
dwTotalPageFile:硬盘上调页文件中包含的最大字节数
dwAvailPageFile:调页文件中尚未提交给任何进程的总的字节数
dwTotalVirtual:每个近处的地址空间中私有的总字节数
dwAvailVirtual:当前进程中所有空闲区域的总和
验证程序:
#include <iostream>
#include <windows.h>
using namespace std;
void main()
{
/*获取虚拟内存状态*/
LPMEMORYSTATUS memoryStatus = new MEMORYSTATUS();
memoryStatus->dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(memoryStatus);
cout << "memoryStatus" << endl;
cout << "MemoryStatus length : " << memoryStatus->dwLength << endl;
cout << endl;
cout << "Total Phys : " << memoryStatus->dwTotalPhys << endl;
cout << "Avail Phys : " << memoryStatus->dwAvailPhys << endl;
cout << endl;
cout << "Total Page File : " << memoryStatus->dwTotalPageFile << endl;
cout << "Avail Page File : " << memoryStatus->dwAvailPageFile << endl;
cout << endl;
cout << "Total Virtual : " << memoryStatus->dwTotalVirtual << endl;
cout << "Avail Virtual : " << memoryStatus->dwAvailVirtual << endl;
cout << endl;
cout << "memoryStatusEx" << endl;
/*获取内存大于4G,或者合计交换文件的大小大于4G情况下的虚拟内存状态*/
LPMEMORYSTATUSEX memoryStatusEx = new MEMORYSTATUSEX();
memoryStatusEx->dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(memoryStatusEx);
cout << "MemoryStatus length : " << memoryStatusEx->dwLength << endl;
cout << endl;
cout << "Total Phys : " << memoryStatusEx
补充:软件开发 , 其他 ,