Allocating aligned memory?

Volker Stolz stolz at
Thu Mar 9 12:45:50 EST 2006

* Li, Peng <ringer9cs+ghc at>:
> In GHC, how can I allocate a chunk of memory aligned to some block
> size (say, 512 or 1024 bytes)? I tried to specify it in the
> "alignment" method in the Storable typeclass, but that does not seem
> to work. Is Storable.alignment really used in GHC? If so, is there a
> code example that allocates aligned memory in this way?
> For the moment I am using the C function memalign() like this:

>From looking at the source, it looks like you may be right...allocation
seems to only invoke plain malloc with just the size.
However, as Claus already pointed out, you should be aware that memalign()
isn't portable. Try using posix_memalign() if available, although even this
function need not be provided on every platform...

On the other hand, a system usually provides at least page-aligned memory if you
request a chunk equal or larger to the page size, and page aligment should
be sufficient for most of your needs. You could even build a small allocator
on top for your favourite alignment :-D

(I'm currently on a machine with page size=4k and no *memalign()).

-- *** PGP *** S/MIME
"All the excitement lies in pattern matching." (SPJ et al.)

More information about the Glasgow-haskell-users mailing list