假设我使用/ 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内核使用 Demand paging )。因此,例如,当触摸第一页并因此将其带入物理存储器时,内核将其所有4096字节初始化为零,然后当触摸第二页时,它执行相同的操作,依此类推。
我的理解是否正确?
答案 0 :(得分:12)
是的,如果您第一次触摸它们,页面才会存在。
顺便说一句,在这种情况下你可以使用标志MAP_ANONYMOUS
,不需要在/dev/null
上打开文件描述符。
答案 1 :(得分:-1)
mmap / dev / zero和ANONYMOUS都没有文件支持,也有归零内容。 请看以下链接 http://man7.org/linux/man-pages/man2/mmap.2.html