实验四、内存监视 1120121965 周佳琪
一.实验目的
了解当前系统中内存的使用情况,包括系统地址空间的布局,物理内存的使用情况;能实时显示某个进程的虚拟地址空间布局和工作集信息等。
二.实验内容
设一个内存监视器,能实时地显示当前系统中内存的使用情况,包括系统地址空间的布局,物理内存的使用情况;能实时显示某个进程的虚拟地址空间布局和工作集信息等。 相关的系统调用:
GetSystemInfo, VirtualQueryEx,VirtualAlloc, GetPerformanceInfo, GlobalMemoryStatusEx …
三.实验环境
四.程序设计与实现
调用getsysteminfo(),getperformanceinfo(,),getprocessmemoryinfo(,,)
int main(int argc, char* argv[]) {
printf(\物理内存的使用率:%ld%%\\n\, statex.dwMemoryLoad); SYSTEM_INFO si;
ZeroMemory(&si, sizeof(si)); GetSystemInfo(&si);
statex.dwLength = sizeof(statex); GlobalMemoryStatusEx(&statex); MEMORYSTATUSEX statex;
cout << \分页大小为:\ << si.dwPageSize << \ << si.dwPageSize / 1024 << \ << cout << \进程可寻址的最小空间为:0x\ << si.lpMinimumApplicationAddress << endl; cout << \进程可寻址的最大空间为:0x\ << si.lpMaximumApplicationAddress << endl; printf(\用户可用物理内存的总容量:%.2f GB = %.2f MB = %.2f KB\\n\,
endl;
(float)statex.ullTotalPhys / 1024 / 1024 / 1024, (float)statex.ullTotalPhys / 1024 / 1024, (float)statex.ullTotalPhys / 1024);
printf(\物理内存的空闲量:%.2f GB = %.2f MB = %.2f KB\\n\, (float)statex.ullAvailPhys / 1024 / 1024 / 1024, (float)statex.ullAvailPhys / 1024 / 1024, (float)statex.ullAvailPhys / 1024);
printf(\进程虚拟地址空间布局和工作集信息查询\\n\); printf(\请输入您想查询的进程的ID:\); //获得每个进程的信息 PROCESSENTRY32 pe; pe.dwSize = sizeof(pe);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); BOOL bMore = ::Process32First(hProcessSnap, &pe); while (bMore) { }
HANDLE hP = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID); PROCESS_MEMORY_COUNTERS pmc; ZeroMemory(&pmc, sizeof(pmc));
if (GetProcessMemoryInfo(hP, &pmc, sizeof(pmc)) == TRUE) { }
bMore = ::Process32Next(hProcessSnap, &pe);
cout << \进程ID:\;
wcout << pe.th32ProcessID << endl; cout << \进程名称:\;
wcout << pe.szExeFile << endl; cout << \虚拟内存大小:\;
cout << (float)pmc.WorkingSetSize / 1024 << \ << endl;
cout << \系统当前提交的页面总数:\ << pi.CommitTotal << endl; cout << \系统当前可提交的最大页面总数:\ << pi.CommitLimit << endl; cout << \系统历史提交页面峰值:\ << pi.CommitPeak << endl; cout << \按页分配的总的物理内存:\ << pi.PhysicalTotal << endl; PERFORMANCE_INFORMATION pi; pi.cb = sizeof(pi);
GetPerformanceInfo(&pi, sizeof(pi));
}
int x; cin >> x;
HANDLE hP = OpenProcess(PROCESS_ALL_ACCESS, FALSE, x); WalkVM(hP); getchar(); getchar(); return 0;
五.实验结果