Pointers and Manual Memory
New / Dispose Typed allocation (handles managed types) GetMem / FreeMem / ReallocMem / AllocMem
Move, FillChar, ZeroMemory, CompareMem Initialize / Finalize
Init/finalize managed types in raw memory {$POINTERMATH ON}
Enables P + N and P[N] on typed pointers PByte, PChar, PInteger, PDouble Common pointer types nil, Assigned(P) Null pointer and check
Memory manager: FastMM is built in (FastMM4-based). FastMM5 is available as a third-party replacement. Use ReportMemoryLeaksOnShutdown := True during development.
var
X: Integer;
P: ^Integer; // typed pointer (or PInteger)
Buf: Pointer;
Rec: ^TPerson;
begin
X := 10;
P := @X; // address of
P^ := 20; // dereference
Writeln(X); // 20
New(Rec); // allocate a typed record (initializes managed fields)
Rec^.Name := 'Ana'; // or Rec.Name (auto-dereference)
Dispose(Rec); // free (finalizes managed fields)
GetMem(Buf, 1024); // raw memory
try
FillChar(Buf^, 1024, 0);
Move(Source^, Buf^, 512);
finally
FreeMem(Buf);
end;
var Mem := AllocMem(256); // zero-initialized
FreeMem(Mem);
end;