带有/ dev / zero的mmap

假设我使用/ dev / zero使用mmap分配一个大内存(40MB),如下所示。

fd = open("/dev/zero", O_RDWR); a = mmap (0, 4096e4, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FILE, fd, 0); 

我所理解的是,内核将把内存初始化为零,因为页面被带入物理内存(我认为现代Linux内核使用按需分页 )。 例如,当第一页被触摸并因此被带入物理内存时,内核将其全部4096个字节初始化为零,然后当第二页被触摸时,它将执行相同的操作,等等。

我的理解是正确的吗?

Solutions Collecting From Web of "带有/ dev / zero的mmap"

是的,如果您第一次触摸这些页面,那么这些页面就会更多。

顺便说MAP_ANONYMOUS ,在这种情况下可以使用MAP_ANONYMOUS标志,不需要在/dev/null上打开文件描述符。

mmap / dev / zero和ANONYMOUS都没有文件支持,也没有内容。 看看下面的链接http://man7.org/linux/man-pages/man2/mmap.2.html