On Friday, 6 February 2015 at 03:59:51 UTC, tcak wrote:
I am on 64-bit Linux.

I defined a struct that it 8 bytes in total.

align(1) struct MessageBase{
align(1):
        ushort qc;
        ushort wc;
        ushort id;
        ushort contentLength;
        void[0] content;
}


I defined a function in this struct that tries to set a pointer to "contentLength" field.

writeln( "Without: ", (&this + id.offsetof) );
writeln( "With   : ", (cast(size_t)&this + id.offsetof) );

Results:
Without: 7FFFF74F5030
With   : 140737342558228

0x7FFFF74F5030 => 140737342558256


As it is seen, there is 28 bytes of difference between them. What is this behaviour exactly?

By the way,

writeln("Base Normal: ", &this);
writeln("Base Cast  : ", cast(size_t)&this);

Result:
Base Normal: 7FFFF74F5010
Base Cast  : 140737342558224

0x7FFFF74F5010 => 140737342558224

These are same. So, the issue is about addition process.

Reply via email to