通过在 Win/Linux 上使用 C/C++ 来使用大页面分配内存的最简单方法是什么?

What is the simplest way to allocate memory with hugepages by using C/C++ on Win/Linux?

通过在 C/C++ 中使用 WINAPI/POSIX 在具有大页面(页面大小为 2 MB 或 1 GB)的 user-space 中分配内存的最简单方法是什么? =27=]?

CPU: x84_64

Huge/Large 页面大小:https://en.wikipedia.org/wiki/Page_(computer_memory)#Huge_pages

WINAPI: VirtualAlloc.

// alocate 1 MB
void* data = VirtualAlloc( NULL, 1024 * 1024, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );

malloc 或 new 有什么问题?

使用 Linux,您可以将 MAP_HUGETLB(也可能 MAP_HUGE_2MB 等...)传递给 mmap(2) (or perhaps mmap2(2)...)

另请参阅内核的 Documentation/vm/hugetlbpage.txt

血淋淋的细节可以是特定于硬件、内核和计算机的。参见 /proc/meminfoproc(5)

(因此,如果 mmapMAP_HUGETLB 失败,请尝试不使用它...)。

顺便说一句,您可能有一些 mallocposix_memalign(3) 的实现,它们可能会在适当的时候尝试 mmapMAP_HUGETLB