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;