内存映射文件:win32下使用内存映射文件



    映射文件把虚拟可寻址空间映射到文件上整个文件就可以很容易访问就像它在内存中但是它实质还是在硬盘中只是需要时候载入需要部分到内存这样可以节约物理内存使用windows 使用 这个来加载EXE和DLL所以这个因该是高效windows下默认虚拟内存页最小是512KB所以对512KB以下文件使用就是多余低效

按照以下步骤使用

1. CreateFile打开您想要映射文件
2. CreateFileMapping其中要求传入先前CreateFile返回句柄生成个建立在CreateFile创建文件对象基础上内存映射对象
3. MapViewOfFile映射整个文件个区域或者整个文件到内存返回指向映射到内存个字节指针
4. 用该指针来读写文件
5. UnmapViewOfFile来解除文件映射
6. CloseHandle来关闭内存映射文件注意必须传入内存映射文件句柄
7. CloseHandle来关闭文件注意必须传入由CreateFile创建文件句柄

/////////////////////////////////////////////
//为了简单 省略检查
//建个test.txt文本文件做实验
//这里只演示读取操作
//win32 console 
//winXP+vc6
//write by DKink|棼紫
//2007.10.09

# \"stdafx.h\"
# <tchar.h>
# <windows.h>

 ( argc, char* argv)
{

   TCHAR *fileName =_T(\"test.txt\");
   
   //--------------------------------------
   //打开文件
   HANDLE fileHandle = CreateFile(
       fileName,
       GENERIC_READ,
       FILE_SHARE_READ,
       NULL,
       OPEN_EXISTING,//文件必须存在
       0,
       NULL);

   //--------------------------------------
   //从文件创建映射对象
   HANDLE fileMapping = CreateFileMapping(
       fileHandle,
       NULL,
       PAGE_READONLY,
       0,
       0,
       NULL);
   //---------------------------------------
   //把文件映射到指针(为什么用char这个大小是个Byte)
   char *fileBase = (char *) MapViewOfFile(
       fileMapping,
       FILE_MAP_READ,
       0,
       0,
       0);
   //--------------------------------------- [Page]
   //使用数据
   MessageBox(NULL,fileBase,\"MTest\",MB_OK);//这句可能有溢出正常情况误用

   
   
   UnmapViewOfFile(fileBase);//解除文件映射

   CloseHandle(fileMapping);//关闭内存映射文件

   CloseHandle(fileHandle);//关闭文件

    0;
}
Tags:  什么是内存映射 内存重映射 内存映射 内存映射文件

延伸阅读

最新评论

发表评论