alignment
Manuel M T Chakravarty
chak at cse.unsw.edu.au
Mon Jan 13 05:00:33 EST 2003
Fergus Henderson <fjh at cs.mu.OZ.AU> wrote,
> On 09-Jan-2003, Ross Paterson <ross at soi.city.ac.uk> wrote:
> > Two additions I think are required:
> >
> > 1) The spec should state that mallocBytes and allocaBytes return a block
> > of memory sufficiently aligned for any of the primitive types supported
> > by the architecture.
>
> I disagree. These routines should only be required to align the memory
> sufficiently for any of the primitive types which could fit in the amount
> of space allocated. For example, double precision floats might occupy
> 8 bytes, and require 8-byte alignment, but four-bytes allocations should
> not be required to be 8-byte aligned.
>
> (This is something the C standard got wrong, IMHO.)
I agree with Fergus.
Ross Paterson <ross at soi.city.ac.uk> wrote,
> 2) The description of Storable should require
>
> sizeOf x `mod` alignment x = 0
>
> The library implementation of mallocArray implicitly assumes this, and
> C also requires that elements of an array are allocated contiguously.
Ok. I attach the amended description of these functions.
Thanks,
Manuel
-=-
\item[sizeOf~~~~::\ Storable a => a -> Int]
\item[alignment~::\ Storable a => a -> Int]\combineitems The function
\code{sizeOf} computes the storage requirements (in bytes) of the argument,
and alignment computes the alignment constraint of the argument. An
alignment constraint \code{x} is fulfilled by any address divisible by
\code{x}. Both functions do not evaluate their argument, but compute the
result on the basis of the type of the argument alone. We require that all
the elements of a contiguous array of storable values meet the alignment
constraint of these values; more formally, we require that
%
\begin{quote}
\begin{verbatim}
sizeOf v `mod` alignment v == 0
\end{verbatim}%
\end{quote}
More information about the FFI
mailing list