内存管理[6]测试堆的内存占用情况
2023-09-11 14:22:50 时间
本例效果图:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} //测试堆的内存占用情况 procedure TForm1.Button1Click(Sender: TObject); var MyHeap: THandle; mem: TMemoryStatus; m1,m2,m3: DWORD; begin {获取当前内存可用状态} GlobalMemoryStatus(mem); m1 := mem.dwAvailPhys; {可用物理内存} m2 := mem.dwAvailPageFile; {可用虚拟内存} m3 := mem.dwAvailVirtual; {可用虚拟地址} {建立私有堆} MyHeap := HeapCreate(HEAP_NO_SERIALIZE, 1024*1204, 0); {建立 1 M 大小的堆} {再获取当前内存可用状态} GlobalMemoryStatus(mem); m1 := m1 - mem.dwAvailPhys; m2 := m2 - mem.dwAvailPageFile; m3 := m3 - mem.dwAvailVirtual; {显示堆占用内存的情况} Memo1.Clear; Memo1.Lines.Add(Format('占用物理内存: %d K', [m1 div 1024])); Memo1.Lines.Add(Format('占用虚拟内存: %d K', [m2 div 1024])); Memo1.Lines.Add(Format('占用虚拟地址: %d K', [m3 div 1024])); {释放堆} HeapDestroy(MyHeap); end; //同上个过程, 外加测试建立堆时页对齐的情况 procedure TForm1.Button2Click(Sender: TObject); var MyHeap: THandle; mem: TMemoryStatus; m1,m2,m3: DWORD; begin GlobalMemoryStatus(mem); m1 := mem.dwAvailPhys; m2 := mem.dwAvailPageFile; m3 := mem.dwAvailVirtual; {建立 1M + 1字节 大小的堆, 但实际大小会按页对齐, 结果应该是: 1M + 4K} MyHeap := HeapCreate(HEAP_NO_SERIALIZE, 1024*1204 + 1, 0); GlobalMemoryStatus(mem); m1 := m1 - mem.dwAvailPhys; m2 := m2 - mem.dwAvailPageFile; m3 := m3 - mem.dwAvailVirtual; Memo2.Clear; Memo2.Lines.Add(Format('占用物理内存: %d K', [m1 div 1024])); Memo2.Lines.Add(Format('占用虚拟内存: %d K', [m2 div 1024])); Memo2.Lines.Add(Format('占用虚拟地址: %d K', [m3 div 1024])); HeapDestroy(MyHeap); end; end.
相关文章
- C写个吃内存的测试LINUX 系统可用内存持续减少的原因
- 软件事务内存导论(十)处理写偏斜异常
- 修改linux的IP 永久VS内存
- 问题-Delphi2007编译时提示内存错误“sxs.dll. No Debug Info.ACCESS 0xXXXXX"
- Laravel 教程:使用Fast Excel解决导出超大 XLSX 文件(千万级)带来的内存问题
- 作用域、闭包、内存泄露
- pandas所占内存释放
- 在测试中使用内存数据库
- paip.最省内存的浏览器评测 cah
- 【Android 逆向】Android 进程注入工具开发 ( EIP 寄存器指向 dlopen 函数 | ESP 寄存器指向栈内存 | 调试程序收回目标进程控制权 )
- Win10内存占用过高但是实际没有多少进程
- android性能测试内存泄漏
- Android性能优化:Github下载超10万次的360°全方面性能调优指南(含内存优化、布局优化、实战解析等)
- 【云原生】监视Docker桌面的容器内存和CPU使用情况