記憶體管理[5]

來源:互聯網
上載者:User
本例在建立一個新的堆前後分別通過 GetProcessHeaps 函數擷取了當前進程的堆控制代碼列表, 沒想到一個最簡單的程式也有 5 個堆.
:


unit Unit1;interfaceuses  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.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.