[fpc-pascal] record alignment

Ryan Joseph ryan at thealchemistguild.com
Fri Jun 15 10:59:19 CEST 2018



> On Jun 15, 2018, at 3:45 PM, Karoly Balogh (Charlie/SGR) <charlie at scenergy.dfmk.hu> wrote:
> 
> The whole idea of a packed record is to ignore alignment and "pack" the
> fields ignoring padding and alignment. Use a normal record without
> "packed", or add the padding fields manually, if you still have to use a
> packed record for whatever reason.
> 
> BTW, $align specifies the alignment in *BYTES* not in bits. So to align to
> 32bits you need {$align 4}. But Free Pascal also supports {$packrecords
> C}, where it will try to mimic the C compiler's alignment as native to the
> target platform. In any unit which needs to interface to a C library, I'd
> use {$packrecords C} and no {$align}

Ok, I see now. I tried adding {$packrecords C} in all units but the size still comes back as 24 instead of 32. So what is the C compiler really doing I wonder? I found out through trial and error I need 2 floats in-between both fields to get proper alignment but why is this? I hate to be adding random space into records which may break on other machines or if built with different compilers (I’m using ppcx64 btw if that matters).

type
	TAAPLVertex = record
		position: vector_float2;

		padding_0: simd_float;
		padding_1: simd_float;

		color: vector_float4;
	end;





Regards,
	Ryan Joseph




More information about the fpc-pascal mailing list