带/ dev / zero的mmap

时间:2011-12-14 16:24:20

标签: c linux memory-management gcc 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内核使用 Demand paging )。因此,例如,当触摸第一页并因此将其带入物理存储器时,内核将其所有4096字节初始化为零,然后当触摸第二页时,它执行相同的操作,依此类推。

我的理解是否正确?

2 个答案:

答案 0 :(得分:12)

是的,如果您第一次触摸它们,页面才会存在。

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

答案 1 :(得分:-1)

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