关于CreateMappingFile和Memory映射文件

Aan*_*Aan 0 c++ winapi shared-memory

我试着读了很多资源,CreateMappingFile但不幸的是我没有那么好的英语,所以我需要问一下如果是真的我得出的结论:

CreateMappingFile为虚拟内存中的文件制作类似RAM的结构,而不是RAM,因此这种结构(或任何被调用的)位于硬盘中,但是以可以传输到RAM的形式.当我们需要将此结构传输到我们使用的RAM时MapViewOfFile.

是对的吗?

Dav*_*rtz 6

CreateFileMapping只是为映射准备一个文件,并为文件映射分配一个句柄.MapViewOfFile实际上给出了映射调用进程的虚拟地址空间中的地址.

由操作系统决定如何将物理RAM专用于该文件映射.每当进程读取或写入映射时,必须至少有一页物理RAM供进程读取或写入.操作系统将根据需要使用物理RAM支持映射(这称为'故障')并从映射中删除物理RAM,因为其他目的需要物理RAM.

映射使用多少物理RAM的管理完全取决于操作系统.通常,操作系统将在访问映射页面时使用物理RAM(可能是前几页),并且只有当页面对该内存有一些其他用途时才会删除页面,它认为这些页面更重要.

顺便说一句,在现代操作系统上,可执行文件完全相同.当您运行可执行文件时,它会映射到进程的内存空间,并且在程序运行时,可执行文件的页面也会根据需要出错.

  • @Adban:'Mapping'意味着通过一大块地址空间显示某些内容.在这种情况下,文件中的数据被映射到内存中,因此进程可以像访问其他内存结构(如数组)一样访问它. (2认同)