AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie funktioniert SizeOf() intern?

Ein Thema von SebE · begonnen am 14. Sep 2005 · letzter Beitrag vom 14. Sep 2005
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Wie funktioniert SizeOf() intern?

  Alt 14. Sep 2005, 18:55
Beim Packed Record wird der Record, sofern möglich gepackt. Im Gegensatz zu ANSI bzw. UCSD-Pascal aber nur auf Byte-Ebene.
Delphi-Quellcode:
Type
  TNibble = 0..15;
  T1 = Record
    a, c : TNibble;
    b : Integer;
    End;
  T2 = Packed Record
    a, c : TNibble;
    b : Integer;
    End;
SizeOf (T2) liefert Delphi 6, bei UCSD-Pascall jedoch 3 (0,5 bytes für a und c und 2 bytes für b, integer ist/war 16 bit). Auf diese Weise hat man früher Bitsets und Statusbytes implementiert. Es war nicht definiert, das eine Menge als Bitset implementiert ist, aber die Packed Records wurden von N.Wirth eindeutig definiert. Aus Gründen der Performance ist man dann davon abgekommen, was eigentlich Schade ist.

Beim SizeOf (TSomeRecord) werden nicht die Größen der einzelnen Record-Elemente addiert, sondern wirklich die Größe des Records, die dieser im Speicher verbraucht, angegeben. So, wie es sein soll. Der Compiler erzeugt beim Parsen der Typdefinition die Offsets der Record-Elemente. Die Recordgröße ergibt sich dann zwangsläufig aus dem höchsten Offset + SizeOf (ThisElement), Auf 1 bzw. 4 Bytes aufgerunden, je nach "Packed" und Compiler-Einstellungen.

Auch wird kein "DataTree" zum Ermitteln der Speichergröße verwendet, sondern eine simple Lookupliste. Dort stehen einfach die Variablen und deren Datentyp drin. Der Compiler muss ja wissen, ob eine Variable deklariert ist, und welcher Datentyp das ist. Im Prinzip stimmt das aber Alles, was dazu erwähnt wurde...

Das ist nur als Anmerkung zu Tommie-Lie's Post gedacht...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz