Wrong pointer calculation without casting on struct

tcak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Feb 5 19:59:50 PST 2015


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?


More information about the Digitalmars-d-learn mailing list