Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Wie funktioniert SizeOf() intern?

  Alt 14. Sep 2005, 17:27
Man kann ja SizeOf() auf Datentypen, Konstanten oder Variablen anwenden.

So muss es wohl ablaufen
Der Compiler schaut also in seinen Syntaxtree (die Dinge sind intern als Baum organisiert) nach.
Der Baum wird auch als "dekorierter Syntaxbaum" bezeichnet.

Trifft er auf eine Variable, dann entnimmt er den Datentyp.
Mit dem Datentyp schaut er in seinen Datatree und entnimmt die Grösse in Bytes.
Pseudocode:
Delphi-Quellcode:
function SizeOf(arg : string):integer;
begin
   item := LookupTree(arg);
   if item=nil then
      CompilerError;

   if IsVariable(item) then
      result := SizeOf(Item.datatypeName)
   else
      result := Item.Instancesize;
end;
Bei komplexen Datentypen wie Records und Objekten, liefert Instancesize die Summe der Einzelteile.
Bei Unions wird die max. InstanceSize der Einzelteile geliefert.
Andreas
  Mit Zitat antworten Zitat