void QueryVirtualMem()
{
void *pAddress = NULL;
MEMORY_BASIC_INFORMATION mbi;
char path[512] = {0};
DWORD dwResult = VirtualQuery(pAddress,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
while (dwResult)
{
cout<<"内存地址起始地址:"<<pAddress<<endl;
switch (mbi.State)
{
case MEM_COMMIT:
cout<<"已经提交"<<endl;
break;
case MEM_RESERVE:
cout<<"已经保留"<<endl;
break;
case MEM_FREE:
cout<<"空闲"<<endl;
break;
default:
break;
}
switch(mbi.Type)
{
case MEM_IMAGE:
cout<<"该地址为文件镜像:"<<endl;
GetModuleFileName((HINSTANCE)pAddress,path,512);
cout<<path<<endl;
break;
case MEM_MAPPED:
cout<<"已经映射了"<<endl;
break;
case MEM_PRIVATE:
cout<<"私有空间"<<endl;
break;
default:
break;
}
cout<<endl;
pAddress = (PBYTE)pAddress + mbi.RegionSize;
dwResult = VirtualQuery(pAddress,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
}
}
void main(int argc,TCHAR*argv[])
{
/******************************GetSystemInfo************************************/
//共12个参数
SYSTEM_INFO si;
GetSystemInfo(&si);
//4个
cout<<"分配粒度 : "<<si.dwAllocationGranularity<<endl;
cout<<"页面大小 : "<<si.dwPageSize<<endl<<endl;
cout<<"每个进程的可用地址空间的最小内存地址 : "<<si.lpMinimumApplicationAddress<<endl;
cout<<"每个进程的可用地址空间的最大内存地址 : "<<si.lpMaximumApplicationAddress<<endl<<endl;
//2个
cout<<"CPU数目 : "<<si.dwNumberOfProcessors<<endl;
cout<<"当前活动的CPU : "<<si.dwActiveProcessorMask<<endl<<endl;
//4个 (有一个是用于Windows98的 没写出来)
cout<<"CPU结构 : "<<si.wProcessorArchitecture<<endl;
cout<<"CPU细分结构 : "<<si.wProcessorLevel<<endl;
cout<<"CPU级别 : "<<si.wProcessorRevision<<endl<<endl;
//2个 还有2个保留的
/****************************GlobalMemoryStatus**************************************/
MEMORYSTATUS ms = { sizeof(ms) };
GlobalMemoryStatus(&ms);
cout<<"内存管理系统的繁忙程度 : "<<ms.dwMemoryLoad<<endl;
cout<<"物理存储器的总字节数 : "<<ms.dwTotalPhys<<endl;
cout<<"物理存储器的未使用总字节数 : "<<ms.dwAvailPhys<<endl;
cout<<"页文件的总字节数 : "<<ms.dwTotalPageFile<<endl;
cout<<"页文件的未使用总字节数 : "<<ms.dwAvailPageFile<<endl;
cout<<"每个进程的地址空间中私有的总字节数 : "<<ms.dwTotalVirtual<<endl;
cout<<"每个进程的地址空间中私有的未使用总字节数 : "<<ms.dwAvailVirtual<<endl<<endl;
/****************************VirtualQuery**************************************/
QueryVirtualMem();
}