Handbuch zur dynamischen Ablaufverfolgung in Solaris

Komponentengrößen und Versatz

Mit dem Operator sizeof lässt sich die Größe in Byte aller beliebigen D-Typen oder -Ausdrücke sowie von Strukturen oder Unionen ermitteln. Der Operator sizeof kann entweder auf einen Ausdruck oder auf den Namen eines in Klammern stehenden Typs angewendet werden:

sizeof Ausdruck				sizeof (Typname)

So würde beispielsweise der Ausdruck sizeof (uint64_t) den Wert 8 zurückgeben, und der Ausdruck sizeof (callinfo.ts) würde im Quellcode des obigen Programmbeispiels ebenfalls 8 zurückgeben. Der formale Rückgabetyp des Operators sizeof ist der Typ-Aliasname size_t, der laut Definition eine vorzeichenlose Ganzzahl derselben Größe eines Zeigers im aktuellen Datenmodell ist und zur Darstellung der Byte-Anzahl verwendet wird. Bei Anwendung des Operators sizeof auf einen Ausdruck wird der Ausdruck vom D-Compiler überprüft, doch die resultierende Objektgröße wird zur Kompilierungszeit berechnet und es erfolgt keine Generierung von Code für den Ausdruck. Sie können sizeof überall dort einsetzen, wo eine ganzzahlige Konstante erforderlich ist.

Mit dem Operator offsetof lässt sich der Versatz (in Byte) einer Struktur- oder Unionskomponente zum Anfang des einem beliebigen Objekt des Typs struct oder union zugewiesenen Speicherbereichs ermitteln. Der Operator offsetof wird in Ausdrücken der folgenden Form verwendet:

offsetof (Typname, Komponentenname)

Dabei ist Typname der Name eines Struktur- oder Union-Typs oder ein Typ-Aliasname, und Komponentenname ist der Bezeichner einer Komponente dieser Struktur bzw. einer Alternative dieser Union. Genau wie sizeof gibt auch offsetof den Typ size_t zurück und kann überall dort in einem D-Programm eingesetzt werden, wo eine ganzzahlige Konstante zulässig ist.