带有MAP_POPULATE的Linux mmap(),手册页似乎给出了错误的信息
在我看来,MAP_POPULATE不仅仅适用于私有映射,与手册页所说的相反:
基于我对mmap.c的Linux内核源的粗略检查,看起来MAP_POPULATE与versions going back as far as 2.6.34中的MAP_PRIVATE完全没有关系. 以下是3.14内核实现中mmap.c的最新代码的摘录: ... 1364 addr = mmap_region(file,addr,len,vm_flags,pgoff); 1365 if (!IS_ERR_VALUE(addr) && 1366 ((vm_flags & VM_LOCKED) || 1367 (flags & (MAP_POPULATE | MAP_NONBLOCK)) == MAP_POPULATE)) 1368 *populate = len; 1369 return addr; ... 我的观察错了吗? 解决方法
自您提出问题后,措辞已更新:
Before: MAP_POPULATE is only supported for private mappings since Linux 2.6.23. After: MAP_POPULATE is supported for private mappings only since Linux 2.6.23. 换句话说,您可以将MAP_POPULATE用于私有映射,但至少需要Linux 2.6.23. 希望这能澄清它! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |