Mam dwa rekordy z tymi samymi polami, a jeden z nich ma zestaw procedur. Dlaczego rozmiar obu rekordów jest taki sam?Dlaczego rozmiar rekordu Delphi nie jest zwiększany, gdy dołączona jest procedura?
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
TData = record
Age : Byte;
Id : Integer;
end;
TData2 = record
Age : Byte;
Id : Integer;
procedure foo1;
procedure foo2;
procedure foo3;
end;
procedure TData2.foo1;
begin
end;
procedure TData2.foo2;
begin
end;
procedure TData2.foo3;
begin
end;
begin
try
Writeln('SizeOf(TData) = '+ IntToStr(SizeOf(TData)));
Writeln('SizeOf(TData2) = '+ IntToStr(SizeOf(TData2)));
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Dodawanie metod nigdy nie zwiększa rozmiaru instancji, dotyczy zarówno rejestracji instancji, jak i obiektów. – kludg
@DavidHeffernan - nie, nie ma. Zwiększa tylko metadane klasy, rozmiar instancji się nie zmienia. Jedynym sposobem zwiększenia rozmiaru instancji poza polami jest użycie interfejsów. – kludg
@Serg Masz rację, jestem w błędzie. Przepraszam. Myślałem, że każda instancja ma kopię VMT. Zakładam, że z powodu wirtualnego przechwytywacza metody. Ale to działa, tworząc kopię VMT. Oczywiście muszę sprawdzić moje fakty, zanim otworzę usta. –