delphi 内存管理[4]


本文整理自网络,侵删。

 

内存管理[4]

一个使用私有堆的例子:
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;type  TForm1 = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}var  MyHeap: THandle; {堆句柄}  p: Pointer;procedure TForm1.Button1Click(Sender: TObject);var  i,num: Integer;  p2: Pointer;  str: string;begin  {建立堆}  MyHeap := HeapCreate(HEAP_ZERO_MEMORY, 1024*1024*2, 0); {建立个 2M 的堆}  if Myheap = 0 then Exit; {如果创建失败则退出}  {从堆中分配内存}  p := HeapAlloc(MyHeap, 0, 7);  if p = nil then Exit; {出错退出}  {获取内存块大小}  num := HeapSize(MyHeap, 0, p);  {给内存块的每个字节赋值}  p2 := p;  for i := 0 to num - 1 do  begin    Byte(p2^) := i + 65;    p2 := Ptr(Integer(p2) + 1);  end;  {取值}  p2 := p;  str := '';  for i := 0 to num - 1 do  begin    str := str + Chr(Byte(p2^));    p2 := Ptr(Integer(p2) + 1);  end;  {显示内存块的内容与大小}  ShowMessageFmt('%s,%d',[str,num]); {ABCDEFG,7}  /////////////////////////////////////////////////////  {扩充内存, 只此一句不同, 下面都是重复上面的代码}  p := HeapReAlloc(MyHeap, 0, p, 26);  if p = nil then Exit; {出错退出}  {获取内存块大小}  num := HeapSize(MyHeap, 0, p);  {给内存块的每个字节赋值}  p2 := p;  for i := 0 to num - 1 do  begin    Byte(p2^) := i + 65;    p2 := Ptr(Integer(p2) + 1);  end;  {取值}  p2 := p;  str := '';  for i := 0 to num - 1 do  begin    str := str + Chr(Byte(p2^));    p2 := Ptr(Integer(p2) + 1);  end;  {显示内存块的内容与大小}  ShowMessageFmt('%s,%d',[str,num]); {ABCDEFGHIJKLMNOPQRSTUVWXYZ,26}  /////////////////////////////////////////////////////  {释放内存}  HeapFree(MyHeap, 0, p);  {销毁堆}  HeapDestroy(MyHeap);end;end.

相关阅读 >>

Delphi 2009 泛型容器单元(generics.collections)[1]: tlist<t>

Delphi设置屏幕分辨率的函数

Delphi vista和win7下如何弹出uac

Delphi 重启启动计算机的代码

Delphi编解码js字符串

Delphi 是否是闰年- isleapyear、isinleapyear

Delphi 实现简易语音发音(基于tts方式)

Delphi vcl gif 动画

Delphi 通过进程id获取进程名

Delphi与sql server存储过程编程详解

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...