Met*_*est 14 c linux gcc memory-management 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);
Run Code Online (Sandbox Code Playgroud)
我的理解是,当页面被带入物理内存时,内核会将内存初始化为零(我认为现代Linux内核使用Demand分页).因此,例如,当第一页被触摸并因此被带入物理存储器时,内核将其所有4096字节初始化为零,然后当触摸第二页时,它执行相同的操作,依此类推.
我的理解是否正确?
Jen*_*edt 12
是的,如果您第一次触摸它们,页面才会存在.
顺便说一句,MAP_ANONYMOUS
在这种情况下你可以使用标志,不需要打开文件描述符/dev/null
.