C语言实现大数据文件的内存映射机制
C语言实现大数据文件的内存映射机制
摘要
本文主要讲述大量数据的文件的内存映射机制的实现。
1.内存映射
内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数(CreateFileMapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
2.实现
#include"stdafx.h" #include"windows.h" #include<iostream> #include<fstream> usingnamespacestd; intmain(intargc,_TCHAR*argv[]){ ////Openthefilethatwewanttomap. HANDLEhFile=::CreateFile(L"C:/Users/JoeWANG/Desktop/Data.txt", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //Createafile-mappingobjectforthefile. HANDLEhFileMapping=::CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0,0, NULL); //Nowmapthefile PCHARpbFile=(PCHAR)::MapViewOfFile(hFileMapping,FILE_MAP_COPY,0,0,0); //Printresult printf("%s\n",((string)pbFile).c_str()); //Closeallfilehandle ::UnmapViewOfFile(pbFile); ::CloseHandle(hFileMapping); ::CloseHandle(hFile); return0; }