首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对大型页面使用mmap和mmap

对大型页面使用mmap和mmap
EN

Stack Overflow用户
提问于 2015-05-27 07:59:00
回答 1查看 13.8K关注 0票数 24

我想在Linux机器正在使用的大型页面上分配内存。我看到有两种方法可以做到这一点,使用mmapmadvise

也就是说,对mmap调用使用MAP_HUGETLB标志-

代码语言:javascript
复制
base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);

以及madvise调用的MADV_HUGEPAGE标志-

代码语言:javascript
复制
madvise(base_ptr_, memory_size_, MADV_HUGEPAGE);

有人能解释一下两者之间的区别吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-27 12:48:56

这两个函数执行不同的操作,这在您的上下文中可能很重要,也可能不重要:

  • madvise为与传递给它的区域相对应的所有内存映射设置一个标志,告诉khugepaged内核线程它可以考虑将这些映射提升到巨大的页面。这只有在启用透明大页面支持的情况下才有效(透明大页面支持的状态在/sys/kernel/mm/transparent_hugepage/enabled下可用),这将是大多数发行版的情况,但在嵌入式systems.
  • mmap上可能会被禁用。实际上,它会继续并保留内核内部hugetlbfs挂载的页面,其状态可以在/sys/kernel/mm/hugepages下看到。相关页面需要在调用mmap时可用(请参阅/proc/meminfo中的HugePages_Free ),否则mmap将失败。

这两种机制在内核树中都有自己的文档文件:hugetlbpage.txttranshuge.txt

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30470972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档