Ich habe zwei Datensätze mit den gleichen Feldern und einer von ihnen hat eine Reihe von Verfahren. Warum ist die Größe beider Datensätze gleich?Warum wird die Größe eines Delphi-Datensatzes nicht erhöht, wenn eine Prozedur eingeschlossen ist?
{$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.
Das Hinzufügen von Methoden erhöht niemals die Instanzgröße, es gilt sowohl für das Aufzeichnen von Instanzen als auch von Objekten. – kludg
@DavidHeffernan - nein, tut es nicht. Es erhöht nur Klassenmetadaten, die Instanzgröße ändert sich nicht. Die einzige Möglichkeit, die Instanzgröße anders als durch Felder zu erhöhen, besteht in Schnittstellen. – kludg
@Serg Sie haben Recht, ich liege falsch. Es tut uns leid. Ich dachte, dass jede Instanz eine Kopie der VMT hatte. Ich nahm das wegen des virtuellen Methodentrenners an. Aber das funktioniert, indem Sie eine Kopie des VMT erstellen. Offensichtlich muss ich meine Fakten überprüfen, bevor ich den Mund öffne. –