windows中内存映射文件

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 05:12 点击:

Windows上,内存映射文件,使得大文件的读写不会消耗太多的内存,也减少了频繁的cpu指令。另外,windows上的进程间共享数据,也是通过内存映射文件的方式来实现。
刚好又遇到这个需求,需要在服务器上一次载入几十兆大小的文件,每个文件大约有100万条数据。所以温习一下这块内容。
使用内存映射文件,需要按下列操作步骤操作:
1,打开一个文件对象,也就是文件句柄了。
2,创建一个文件映射对象 。
3,获取文件映射对象在进程地址空间的指针。
当完成对内存映射文件操作时,执行下面这些步骤清理内存:
1,告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像。
2,关闭文件映射对象。
3,关闭文件句柄。
内存映射可以高效的对大文件进行读写操作,可以这样理解,这个文件在物理磁盘上的存储空间被作为虚拟内存使用了,你读写这块内存区域,就相当于读写文件。在效率上,比I/O文件系统高了很多。win32上的进程间消息传递SendMessage和PostMessage都是用到这种方法。
实际上如果只是单纯使用它,就不必深究原理,否则需要去看《Windows核心编程》。
代码是硬道理:
假设在E盘有一个测试文件test.txt,内容如下:
#include "windows.h"
#include "stdio.h"
 
int main()
{
    //文件对象
    TCHAR  STR[] = "hello world!";
    HANDLE hFile = CreateFile("E:\\test.txt",
    GENERIC_READ | GENERIC_WRITE,
    0,
    NULL,
    OPEN_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);
    //映射对象
    HANDLE hFileMapping = CreateFileMapping(hFile,
    NULL,
    PAGE_READWRITE,
    0,
    0,
    NULL);
    //这里赋值了2个文件映射的指针,地址从文件头开始
    TCHAR *pbFile1 = (TCHAR *)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0);
    TCHAR *pbFile2 = (TCHAR *)MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0);
    /*
    输出字符串的内容,可以看到的是,把整个文件当作字符串输出了。
    当然,如果文件中含有'\0'的字符,你看不到全部文件内容的输出。
    */
    //两个输出的结果是一样的
    printf("%s\n", pbFile1);
    printf("%s\n", pbFile2);
    /*
    下面的操作是往这个pbFile1指向的地址写入点自定义的内容,
    然后比较pbFile2指向地址的值是否相应改变了。
    */
    memcpy(pbFile1, STR, strlen(STR));
    printf("%s\n", pbFile1);
    printf("%s\n", pbFile2);
    //清理指针和内存
    UnmapViewOfFile(pbFile1);
    UnmapViewOfFile(pbFile2);
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
    return 0;
}

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • dos命令原来也能这样用?允许查找未知子目录指定文件
      •  windows的磁盘操作之八——格式化分区的思考
      • windows篇-第三章 安装和配置DNS服务器
      • windows篇-第二章 安装和配置Web服务器
      • windows篇-第一章 windows server 2008安装和简单配置
      •  windows server 2003断开远程之后自动注销用户
      • Windows服务器下用IIS Rewrite组件为IIS设置伪静态方法
      • Windows 2008 R2 SP1部署WSUS 3.0 SP2
      • windows 2008 rodc扩展

      快速直达

      操作系统导航

      LinuxWindows虚拟机
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1