实验四

更新时间:2023-12-16 05:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验四、内存监视 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;

五.实验结果

六.实验心得

掌握了许多关于Windows内存信息的系统函数,了解了系统内部内存工作的方式及情况。

对于getsysteminfo(),getperformanceinfo(,),getprocessmemoryinfo(,,)等获取系统以及进程特征信息的函数有了深入和直观的了解。准确认知函数内参数的意义与应用。同时知道进程占用的存储空间远没有想象中多。Windows把每个进程的虚拟内存地址映射为物理内存地址。物理内存地址即计算机配置的RAM,windows通过分配RAM、页面文件或两者中的空间,可准确知道应用程序所需要的内存。通过本次实验的学习。我了解到想要知道当前电脑正在运行的进程。处理查看任务资源管理器外。也可以通过系统信息函数调用,用cmd来查看当前正在运行的程序。很有收获,更加深入和清楚的了解了许多以前模糊的地方。

本文来源:https://www.bwwdw.com/article/2nh5.html

Top