c – Ubuntu 10.04,MAP_HUGETLB与MAP_SHARED一起使用时出错
以下是我用于使用hugepages在ubuntu中对文件进行mmaping的代码,但是这个调用失败并出现错误“invalid argument”.但是,当我通过时 其次,我无法理解为什么MAP_PRIVATE允许文件mmaping,此标志本身意味着不会将更改写回文件.这总是可以使用MAP_ANON来完成,还是我缺少一些东西? 有人可以帮我这些吗?
最佳答案
你的问题都归结为同一点:使用mmap()可以获得两种映射:匿名内存和文件.
匿名内存(如手册页中所述)不受文件系统中任何文件的支持.相反,从MAP_ANON调用mmap()返回的内存是纯系统内存.该接口的主要用户是C库,它使用它来获取malloc / free的后备存储.因此,使用MAP_ANON明确表示您不想映射文件. 文件支持的内存类型将文件(或其部分)混合到应用程序的地址空间中.在这种情况下,内存内容实际上由文件的内容支持.将MAP_PRIVATE标志视为首先为文件分配内存,然后将内容复制到此内存中.事实上,这不是内核正在做的事情,但让我们假装. HUGE_TLB是内核为匿名内存提供的功能(请参阅mmap()手册页中引用的Documentation / vm / hugetlb-page.txt).这应该是在将HUGETLB用于文件时mmap()调用失败的原因. *编辑:不完全正确.有一个RAM文件系统(hugetlbfs)支持大页面.但是,huge_tlb映射不适用于任意文件,因为我理解文档.* 有关如何使用HUGE_TLB和相应的内存文件系统(hugetlbfs)的详细信息,您可能需要考虑LWN上的以下文章: > Huge Pages,Part 1(简介) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |