Этот однострочный лайнер сделает это - если он уже выровнен по горизонтали, он не перейдет к следующей границе страницы:
aligned = ((unsigned long) a & (getpagesize()-1)) ? (void *) (((unsigned long) a+getpagesize()) & ~(getpagesize()-1)) : a;
Этот однострочный лайнер будет делать это - если он уже выровнен по горизонтали, будет не перейти к следующей границе страницы:
, если вы действительно сделали хотите перейти на следующую границу страницы, даже если она уже выровнена - просто выполните:
aligned = (void *) (((unsigned long) a+getpagesize()) & ~(getpagesize()-1))
Это также должно избегать всех предупреждений компилятора.
getpagesize()
- это POSIX. #include <unistd.h>
, чтобы избежать предупреждений.