mmapで取れるアドレスはページサイズでアラインされている

boehm gc にそのような記述があったので試してみた.

#include <unistd.h>
#include <sys/mman.h>
#include <stdio.h>
#include <fcntl.h>

void
mmap_align_check(void)
{
    int fd;
    char *ret;

    fd = open("/dev/zero", O_RDONLY);
    ret = mmap(0, 1000, PROT_WRITE , MAP_PRIVATE, fd, 0);
    printf("MMAPed address: %p, 4KB align? : %s\n", ret, (((int)ret == ((int)ret & ~(4096-1)))? "true" : "false"));
}

int
main(void)
{  
    int i;
    for (i = 0; i < 30; i++) mmap_align_check();
}

そりゃそうだわな.