mmap /dev/zeroできない

ちょっとはまった

Linuxだと/dev/zeroから適当にmmapしてメモリ確保するけどmac os xでそれやるとこける。
かわりに-1をmmapするとよい。

#ifdef __linux__
int fd = ::open("/dev/zero", O_RDONLY);
return mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
#elsif __APPLE__
return mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
#endif

ちなみにfd -1をMAP_PRIVATEは失敗するので、MAP_SHARED | MAP_ANONじゃないとだめぽい。