[英]Huge pages on Mac OS X
Mac OS X mmap手冊頁說可以分配超級頁面,我收集它與Linux大頁面相同。
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/mmap.2.html
但是,在Mac OS X(Yosemite 10.10.5)上,以下簡單測試失敗:
#include <stdio.h>
#include <sys/mman.h>
#include <mach/vm_statistics.h>
int
main()
{
void *p = mmap((void *) 0x000200000000, 8 * 1024 * 1024,
PROT_READ | PROT_WRITE,
MAP_ANON | MAP_FIXED | MAP_PRIVATE,
VM_FLAGS_SUPERPAGE_SIZE_2MB, 0);
printf("%p\n", p);
if (p == MAP_FAILED)
perror(NULL);
return 0;
}
輸出是:
0xffffffffffffffff
Cannot allocate memory
結果與從標志中刪除的MAP_FIXED
和作為地址參數提供的NULL
相同。 用-1
替換VM_FLAGS_SUPERPAGE_SIZE_2MB
導致預期結果,即沒有發生錯誤,但顯然分配的內存空間使用常規的4k頁面。
以這種方式分配超級頁面可能會出現什么問題?
對於發布的示例的這個小修改適用於Mac OS 10.10.5:
#include <stdio.h>
#include <sys/mman.h>
#include <mach/vm_statistics.h>
int
main()
{
void *p = mmap(NULL,
8*1024*1024,
PROT_READ | PROT_WRITE,
MAP_ANON | MAP_PRIVATE,
VM_FLAGS_SUPERPAGE_SIZE_2MB, // mach flags in fd argument
0);
printf("%p\n", p);
if (p == MAP_FAILED)
perror(NULL);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.