C語言實現大數據文件的內存映射機制
摘要
本文主要講述大量數據的文件的內存映射機制的實現。
1. 內存映射
內存映射文件,是由一個文件到一塊內存的映射。Win32提供了允許應用程序把文件映射到一個進程的函數 (CreateFileMapping)。內存映射文件與虛擬內存有些類似,通過內存映射文件可以保留一個地址空間的區域,同時將物理存儲器提交給此區域,內存文件映射的物理存儲器來自一個已經存在于磁盤上的文件,而且在對該文件進行操作之前必須首先對文件進行映射。使用內存映射文件處理存儲于磁盤上的文件時,將不必再對文件執行I/O操作,使得內存映射文件在處理大數據量的文件時能起到相當重要的作用。
2. 實現
#include "stdafx.h" #include "windows.h" #include <iostream> #include <fstream> using namespace std; int main(int argc, _TCHAR* argv[]){ //// Open the file that we want to map. HANDLE hFile = ::CreateFile(L"C:/Users/Joe WANG/Desktop/Data.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Create a file-mapping object for the file. HANDLE hFileMapping = ::CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0, 0, NULL); // Now map the file PCHAR pbFile = (PCHAR)::MapViewOfFile(hFileMapping, FILE_MAP_COPY, 0, 0, 0); // Print result printf("%s/n", ((string)pbFile).c_str()); // Close all file handle ::UnmapViewOfFile(pbFile); ::CloseHandle(hFileMapping); ::CloseHandle(hFile); return 0; }
新聞熱點
疑難解答
圖片精選