我想在Linux机器正在使用的hugepages上分配内存。我看到有两种方法可以做到这一点,一种是使用mmap
,另一种是使用madvise
。
也就是说,在mmap
调用中使用MAP_HUGETLB
标志-
base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
使用madvise
调用时,可以使用MADV_HUGEPAGE
标志 -
madvise(base_ptr_, memory_size_, MADV_HUGEPAGE);
有人能解释一下这两者之间的区别吗?
mmap
是更可靠的选择?这是正确的吗? - ssbmmap
可以让您指定其行为。如果您不确定内存将如何使用(是否会出现碎片?系统中是否有其他大页面用户),则透明大页最终会给您带来最佳结果。 - Frederik Deweerdtmadvise
只适用于私有匿名映射。 - makerj