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/

Reply via email to