当前位置:软件学习 > 其它软件 >>

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

补充:软件开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,