Aşağıda bir record tipini heap'de farklı yöntemlerle allocate etmeyi denedim.Şimdilik hata kontrolünü atladım.
Kod: Tümünü seç
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
WinApi.Windows;
type
TPerson = record
FirstName: string;
LastName: string;
Age: Byte;
end;
PPerson = ^TPerson;
var
Person1: TPerson;
Person2: PPerson;
hHeap: Cardinal;
begin
ReportMemoryLeaksOnShutdown := true;
WriteLn('Person1 Stack Size :' + SizeOf(Person1).ToString());
Person1.FirstName := 'kimim';
Person1.LastName := 'ben';
Person1.Age := 31;
New(Person2);
WriteLn('Person2 Stack Size :' + SizeOf(Person2).ToString());
Person2^.FirstName := 'kimim';
Person2^.LastName := 'ben';
Person2^.Age := 31;
WriteLn(Person2^.FirstName);
WriteLn(Person2^.LastName);
WriteLn(Person2^.Age);
Dispose(Person2);
hHeap := GetProcessHeap();
Person2 := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, SizeOf(TPerson));
WriteLn('Person2 Stack Size :' + SizeOf(Person2).ToString());
WriteLn('Person2 Heap Size :' + HeapSize(hHeap, 0, Person2).ToString());
Person2^.FirstName := 'kimim';
Person2^.LastName := 'ben';
Person2^.Age := 31;
WriteLn(Person2^.FirstName);
WriteLn(Person2^.LastName);
WriteLn(Person2^.Age);
HeapFree(hHeap, 0, Person2);
Readln;
end.
Person1 Stack Size :12
Person2 Stack Size :4
kimim
ben
31
Person2 Stack Size :4
Person2 Heap Size :12
kimim
ben
31
Delphi'nin new methodunu mu kullanmak mantıklı, yoksa Windows api fonksiyonlarını mı ?
Avantaj dezanavantları neler olabilir ?