記憶體管理[4]

來源:互聯網
上載者:User
一個使用私人堆的例子:
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.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.