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 unigui程序部署到服务器

Delphi 判断按键状态

Delphi ios 保持设备开机状态

Delphi idftp 使用被动连接

检查是否在Delphi xe7中启用或禁用了android蓝牙

Delphi 取键盘值

Delphi 判断文件是否被占用

Delphi 一行关键代码阻止360云查杀

indy10下的tidhttp控件获取源码乱码的解决方法

Delphi cef4Delphi 浏览器事件

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



打赏

取消

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

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

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

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

评论

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