Op Sat, 28 Jan 2017 06:26:16 +0100 schreef Damian McGuckin
<dami...@esi.com.au>:
What is the recommended most portable way to force memory alignment for
a datum of any type, assuming one has a pointer say
char *x
I currently use something like
char *xany = aligntonext(x, sizeof(long))
where I use my own function 'aligntionext' which is defined below and I
also assume that a 'long' will be the natural word-size of the machine
and that any datum things just needs to align to this boundary. That
said, if the second argument is say 4k, the function will align its
result to a 4k boundary.
I was wondering if there is an optimal, better, more acceptable, or more
portable, way.
Easy and very portable:
void *
aligntonext(void *x, size_t size)
{
return (void *)((((uintptr_t)x + size - 1u) / size) * size);
}
Whether it is optimal depends on compiler optimization.
--
Gemaakt met Opera's e-mailprogramma: http://www.opera.com/mail/