Member Sizes and Offsets
You can determine the size in bytes of any D type or expression,
including a struct or union, using the sizeof operator. The sizeof operator can be
applied either to an expression or to the name of a type
surrounded by parentheses, as illustrated by the following two examples:
sizeof expression sizeof (type-name)
For example, the expression sizeof (uint64_t) would return the value 8, and the expression
sizeof (callinfo.ts) would also return 8 if inserted into the source code of our
example program above. The formal return type of the sizeof operator is the
type alias size_t, which is defined to be an unsigned integer of the same
size as a pointer in the current data model, and is used
to represent byte counts. When the sizeof operator is applied to an expression, the
expression is validated by the D compiler but the resulting object size is
computed at compile time and no code for the expression is generated. You
can use sizeof anywhere an integer constant is required.
You can use the companion operator offsetof to determine the offset in bytes
of a struct or union member from the start of the storage associated
with any object of the struct or union type. The offsetof operator is
used in an expression of the following form:
offsetof (type-name, member-name)
Here type-name is the name of any struct or union type or type
alias, and member-name is the identifier naming a member of that struct or
union. Similar to sizeof, offsetof returns a size_t and can be used anywhere
in a D program that an integer constant can be used.