Are padding bits always zero?

Honey via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jun 24 07:32:19 PDT 2017


On Saturday, 24 June 2017 at 12:41:47 UTC, Steven Schveighoffer 
wrote:
> Any padding bits between fields should be 0 as long as the 
> struct is initialized (i.e. as long as you don't do Struct s = 
> void).
>
> Padding bits after the fields I assume would be 0, but I don't 
> know if this is defined. It's possible the compiler doesn't 
> consider those bits to be part of the struct, and just there 
> for alignment.
>
> There is no spec for this, but I know that when the compiler 
> has to fill gaps with something it chooses 0.

Thanks. Your answer has generated more questions. ;-)

Let's say, I have a struct S of size n with m bits of padding at 
the end. How can I find m?

Is it possible to provide a facility Pad such that for any struct 
T, Pad!T is a struct that mimics T but contains explicit instead 
of implicit padding? E.g.

struct Foo
{
    ubyte b;
    double d;
    int i;
}

struct Pad!Foo
{
    ubyte b;
    ubyte[7] __padding_0;
    double d;
    int i;
    ubyte[4] __padding_1;
}


More information about the Digitalmars-d-learn mailing list