Manuel de suivi dynamique Solaris

Tailles des membres et décalages

Vous pouvez déterminer la taille en octets de tout type ou expression en D, y compris une struct ou une union, à l'aide de l'opérateur sizeof. Vous pouvez appliquer l'opérateur sizeof à une expression ou à un nom d'un type placé entre parenthèses, comme illustré dans les deux exemples suivants :

sizeof expression				sizeof (type-name)

Par exemple, l'expression sizeof (uint64_t) doit retourner la valeur 8 tandis que l'expression sizeof (callinfo.ts) doit retourner la valeur 8 si elle est insérée dans le code source de notre exemple de programme ci-dessus. Le type de retour formel de l'opérateur sizeof est l'alias de type size_t. Ce dernier est défini comme un nombre entier non signé de la même taille qu'un pointeur dans le modèle de données courant et sert à représenter des comptes d'octets. Lorsque l'opérateur sizeof est appliqué à une expression, cette dernière est validée par le compilateur D mais la taille de l'objet qui en résulte est calculée au moment de la compilation et aucun code n'est généré pour l'expression. Vous pouvez utiliser sizeof chaque fois qu'une constante entière est requise.

Vous pouvez utiliser l'opérateur d'accompagnement offsetof pour déterminer le décalage en octets d'un membre de la struct ou de l'union depuis le début du stockage par rapport à n'importe quel objet du type de struct ou d'union. L'opérateur offsetof est utilisé dans une expression semblable à celle-ci :

offsetof (type-name, member-name)

Dans cet exemple, type-name correspond au nom d'un type de struct ou d'union ou d'un alias de type et member-name correspond au nom d'identification d'un membre de cette struct ou union. De même que sizeof, la fonction offsetof renvoie une valeur size_t. Vous pouvez l'utiliser dans un programme en D dès l'instant qu'une constante entière peut être utilisée.