内存管理五

news/2024/7/20 15:24:18 标签: 内存管理

本例在建立一个新的堆前后分别通过 GetProcessHeaps 函数获取了当前进程的堆句柄列表, 没想到一个最简单的程序也有 5 个堆.



效果图:



 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{把下面两个过程公用的部分提取为一个独立的过程}
procedure GetHeaps(List: TStrings);
var
HeapArr: array[0..9] of THandle; {对列表数组, 先假定有 10 堆}
n: Integer;
i: Integer;
begin
{获取进程中的堆列表; 函数的参数1是数组大小, 参数2是数组的第一个元素, 返回堆的实际数量}
n := GetProcessHeaps(Length(HeapArr), HeapArr[0]);
List.Add(Format('当前进程共有 %d 个堆', [n]));
List.Add('它们的句柄分别是:');
for i := 0 to n - 1 do
List.Add(IntToStr(HeapArr[i]));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
{调用公用过程, 在 Memo1 中显示堆句柄列表}
GetHeaps(Memo1.Lines);
{再次添加默认堆的句柄}
Memo1.Lines.Add('');
Memo1.Lines.Add('默认堆的句柄是:');
Memo1.Lines.Add(IntToStr(GetProcessHeap));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyHeap: THandle;
begin
{创建新堆}
MyHeap := HeapCreate(0, 1024*1024*2, 0); {建立个 2M 的堆}
Memo2.Clear;
{调用公用过程, 在 Memo2 中显示堆句柄列表}
GetHeaps(Memo2.Lines);
{再次添加新建堆的句柄}
Memo2.Lines.Add('');
Memo2.Lines.Add('新建堆的句柄是:');
Memo2.Lines.Add(IntToStr(MyHeap));
{销毁新建堆}
HeapDestroy(MyHeap);
end;
end.

http://www.niftyadmin.cn/n/1373786.html

相关文章

读取并显示已写入ORACLE数据库中的图片

上篇文章我们已经完成了图片文件上传到数据库&#xff0c;现在我们需要将图片文件读出并显示到网页中指定的位置。 一、新建一个JSP用于显示图片。名称了displayImg.jsp <% page language"java" import"java.util.*" pageEncoding"GB18030"%…

当我们老去的时候……(看完眼泪哗啦啦)

树欲静而风不止&#xff0c;子欲养而亲不待&#xff0c;不要当失去时才去后悔没有珍惜……张老太做了一辈子的家务&#xff0c;如今坐在轮椅上的她还嚷着要给别人做活带孩子&#xff0c;别人都笑她老糊涂了screen.width*0.7) {this.resizedtrue; this.widthscreen.width*0.7; t…

关于Apple Mac OS X - Snow Leopard 双系统安装过程

1&#xff0c; 开机时按del键进入bios&#xff0c;在右上角点“退出/高级模式”&#xff0c;点“高级模式”&#xff0c;点“高级”&#xff0c;点击“STAT设置”,查看第一行STAT模式&#xff0c;如果是ACHI&#xff0c;跳到下一步&#xff0c;如果是IDE,需要经以下步骤改为AC…

Java JFrame设计及最小化到系统托盘的实现

Java JFrame可以实现本地实例化窗口&#xff0c;通过向JFrame添加各种控件&#xff0c;实现各种相应的功能。 一、创建窗口实例 JFrame myFrame new JFrame(); 二、设置JFrame的各种属性 myFrame.setLayout(new BorderLayout()); ---设置窗口中组件的排列方式 myFrame.setTitl…

JAVA获取硬盘序列号

硬盘序列号是硬盘格式化时系统随机分配给硬盘的一组十六进制字符串&#xff0c;除分对硬盘重新进行格式化&#xff0c;硬盘序列号是不会改变的。所以&#xff0c;很多软件都会以硬盘序列号判断用户是否合法用户。以下是JAVA获取硬盘序列号的方法。 public static String getHdS…

感悟数据封装

感悟数据封装 通常&#xff0c;人们将“把数据和函数捆绑在一起”以及“隐藏实现”的操作称为数据封装。今天在实验室调试了一个同学矩阵加减乘除的程序&#xff0c;切身体会到数据封装之重要性。 情况是这样的&#xff0c;一个矩阵加减乘除的题目&#xff0c;要求矩阵是稀疏矩…

使用EXE4J将JAR包转换为EXE文件

EXE4J是一个不错的打包软件&#xff0c;它可以将JAR包打包成EXE文件以便于在WINDOWS环境下运行&#xff0c;笔者经过使用。对其使用方法进行了总结&#xff0c;现介绍如下&#xff1a; 1.启动EXE4J&#xff0c;如下图&#xff1a; 图中OPEN按钮用于打开已经编辑过的.EXE4J文件&…

降龙十八掌图片

第一招&#xff1a;起手式“见龙在田”screen.width*0.7) {this.resizedtrue; this.widthscreen.width*0.7; this.altClick here to open new window;}" border0> 第二招&#xff1a;飞龙在天screen.width*0.7) {this.resizedtrue; this.widthscreen.width*0.7; this.…