Windows 如何向CreateFileMapping/OpenFileMapping提供地址

Windows 如何向CreateFileMapping/OpenFileMapping提供地址,windows,64-bit,huge-pages,Windows,64 Bit,Huge Pages,是否有一个函数可用于提供要使用的地址映射 我正在试图找到一种方法来利用大页面,即使我必须映射小文件。我知道我会浪费记忆。或者,我可以使用VirtualAlloc分配一个页面大小的块,然后将其切块并映射到多个文件中。我假设,因为内存映射是由虚拟内存子系统支持的,所以这是不可能的——单个内存页可能必须由单个文件支持 我想我会在做任何事情之前先问一下。我怀疑这是不可能的,但只是一个想法: 地址分配决策属于MapViewOfFile,而不是CreateFileMapping。而且MapViewOfFil

是否有一个函数可用于提供要使用的地址映射

我正在试图找到一种方法来利用大页面,即使我必须映射小文件。我知道我会浪费记忆。或者,我可以使用VirtualAlloc分配一个页面大小的块,然后将其切块并映射到多个文件中。我假设,因为内存映射是由虚拟内存子系统支持的,所以这是不可能的——单个内存页可能必须由单个文件支持


我想我会在做任何事情之前先问一下。

我怀疑这是不可能的,但只是一个想法:


地址分配决策属于
MapViewOfFile
,而不是
CreateFileMapping
。而且
MapViewOfFile
肯定会在
NTDLL.DLL
中调用一些本机API。您可以找出它调用哪个函数来实际创建映射,谁知道呢?该函数可能更灵活,允许使用
KERNEL32
实现一些不可能的功能。(例如,我们知道PE文件节的映射方式是您无法用
MapViewOfFile
模仿的)。

映射由
MapViewOfFile
完成,但您传递的地址必须是尚未使用的地址。(将一个地址映射到两个不同的东西是没有意义的。)MapViewOffilex允许您指定一个基址,但基址必须位于内存页的开头,因此无法将多个文件映射到一个页面。但是,一个页面占用的内存非常少,因此,除非您同时映射数十万个文件,否则真的没有必要担心。我认为您是最接近的答案。知道源代码在哪里吗?哈哈。看起来他们给了我们很大的页面,但没有足够的方法来利用它们。