📄 如何获得系统的内存信息.txt
字号:
如何获得系统的内存信息
GlobalMemoryStatus
来自ITwiki,开放的信息技术大百科
Jump to: navigation, <jumptoSearch>
GlobalMemoryStatus,Win32 API函数。
此函数用来获得当前可用的物理和虚拟内存信息,函数定义为:
VOID GlobalMemoryStatus (
LPMEMORYSTATUS lpBuffer
);
此函数无返回值,参数是一个指向名为MEMORYSTATUS的结构的指针。函数的返回信息会被存储在MEMORYSTATUS结构中。
此函数用来替代用来支持16位应用程序的GetFreeSpace函数。
应用程序应该在申请内存前调用此函数以防止影响到其他程序运行。
这个函数的返回值是动态的,并且可能返回相同的值。
关于MEMORYSTATUS结构:
机构定义:
typedef struct _MEMORYSTATUS { // mst
DWORD dwLength; // sizeof(MEMORYSTATUS)
DWORD dwMemoryLoad; // percent of memory in use
DWORD dwTotalPhys; // bytes of physical memory
DWORD dwAvailPhys; // free physical memory bytes
DWORD dwTotalPageFile; // bytes of paging file
DWORD dwAvailPageFile; // free bytes of paging file
DWORD dwTotalVirtual; // user bytes of address space
DWORD dwAvailVirtual; // free user bytes
} MEMORYSTATUS, *LPMEMORYSTATUS;
结构成员的含义: dwLength MEMORYSTATUS结构的大小,在调GlobalMemoryStatus函数前用sizeof()函数求得,用来供函数检测结构的版本。
dwMemoryLoad 返回一个介于0~100之间的值,用来指示当前系统内存的使用率。
dwTotalPhys 返回总的物理内存大小,以字节(byte)为单位。
dwAvailPhys 返回可用的物理内存大小,以字节(byte)为单位。
dwTotalPageFile 显示可以存在页面文件中的字节数。注意这个数值并不表示在页面文件在磁盘上的真实物理大小。
dwAvailPageFile 返回可用的页面文件大小,以字节(byte)为单位。
dwTotalVirtual 返回调用进程的用户模式部分的全部可用虚拟地址空间,以字节(byte)为单位。
dwAvailVirtual 返回调用进程的用户模式部分的实际自由可用的虚拟地址空间,以字节(byte)为单位。
void CDdsdsDlg::OnButton1()
{
MEMORYSTATUS tmp;
CEdit *pedit=(CEdit*)GetDlgItem(IDC_EDIT1);
CString str="",str0;
::GlobalMemoryStatus(&tmp);
str0.Format("内存占用率 : %d%% %c%c",tmp.dwMemoryLoad,'\r','\n') ;
str+=str0;
str0.Format("物理内存 : %dB %c%c",tmp.dwTotalPhys,'\r','\n') ;
str+=str0;
str0.Format("剩余物理内存: %dB %c%c",tmp.dwAvailPhys,'\r','\n') ;
str+=str0;
str0.Format("页面总数 : %d %c%c",tmp.dwTotalPageFile,'\r','\n') ;
str+=str0;
str0.Format("剩余页面数 : %d %c%c",tmp.dwAvailPageFile,'\r','\n') ;
str+=str0;
str0.Format("虚拟内存总数: %d %c%c",tmp.dwTotalVirtual,'\r','\n') ;
str+=str0;
str0.Format("剩余虚拟内存: %d %c%c",tmp.dwAvailVirtual,'\r','\n') ;
str+=str0;
pedit->SetWindowText(str);
获得系统的内存信息,需使用Windows API函数GlobalMemoryStatus,Delphi中的语法如下所示:
Procedure GlobalMemoryStatus(var lpBuffer: TMemoryStatus); stdcall;
其中的TMemoryStatus结构为:
TMemoryStatus=record
dwLength:DWORD;
dwMemoryLoad:DWORD;
dwTotalPhys:DWORD;
dwAvailPhys:DWORD;
dwTotalPageFile:DWORD;
dwAvailPageFile:DWORD;
dwTotalVirtual:DWORD;
dwAvailVirtual:DWORD;
下面完成一个示范程序,选择“File|New Application”菜单命令,在默认的窗体中添加1个Memo组件和1个Button组件,然后在Button的OnClick事件中添加如下所示的代码。
Procedure TForm1.Button1Click(Sender: TObject);
var
MemoryStatus: TMemoryStatus;
begin
Memo1.Lines.Clear;
MemoryStatus.dwLength := SizeOf(MemoryStatus);
GlobalMemoryStatus(MemoryStatus);
with MemoryStatus do
begin
Memo1.Lines.Add(IntToStr(dwLength) +' Size of ''MemoryStatus'' record');
Memo1.Lines.Add(IntToStr(dwMemoryLoad) +'% memory in use');
Memo1.Lines.Add(IntToStr(dwTotalPhys) +' Total Physical Memory in bytes');
Memo1.Lines.Add(IntToStr(dwAvailPhys) +' Available Physical Memory in bytes');
Memo1.Lines.Add(IntToStr(dwTotalPageFile) +' Total Bytes of Paging File');
Memo1.Lines.Add(IntToStr(dwAvailPageFile) +' Available bytes in paging file');
Memo1.Lines.Add(IntToStr(dwTotalVirtual) +' User Bytes of Address space');
Memo1.Lines.Add(IntToStr(dwAvailVirtual) +' Available User bytes of address space');
end;
end;
按下F9键运行程序,单击“内存信息”按钮,则在Memo组件中将显示有关内存的信息,如图21所示。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -