Storable tuples and what is 'alignment'?

Glynn Clements glynn.clements at virgin.net
Tue Aug 6 13:58:28 EDT 2002


Simon Marlow wrote:

> > You also need to allow for any padding which is required to satisfy
> > the alignment constraints of b, e.g.
> > 
> > 	sizeOf (a,b) = sizeOf a + padding (a,b) + sizeOf b
> > 		where padding (a,b) = (alignment b - sizeOf a 
> > `mod` alignment b) `mod` alignment b
> > 
> > >     alignment (a,b) = alignment a + alignment b
> > 
> > The alignment of the overall structure is determined by the alignment
> > of the first element. Subsequent elements are aligned (if necessary)
> > by the addition of padding between elements.
> > 
> > 	alignment (a,_) = alignment a

... except, of course, that you would then need a variable amount of
padding if b's alignment exceeds that of a.

> I think in fact that the aligment of the whole structure should be
> 
> 	alignment (a,b) = alignment a `max` aligment b

Technically, it should be the least common multiple of the components'
alignments. If alignments were guaranteed to be a power of two (as
they invariably are), then "max" would suffice; but I can't find
anything in the documentation which actually *states* that that is the
case.

-- 
Glynn Clements <glynn.clements at virgin.net>



More information about the FFI mailing list