C語言實(shí)現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機(jī)制
C語言實(shí)現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機(jī)制
摘要
本文主要講述大量數(shù)據(jù)的文件的內(nèi)存映射機(jī)制的實(shí)現(xiàn)。
1. 內(nèi)存映射
內(nèi)存映射文件,是由一個文件到一塊內(nèi)存的映射。Win32提供了允許應(yīng)用程序把文件映射到一個進(jìn)程的函數(shù) (CreateFileMapping)。內(nèi)存映射文件與虛擬內(nèi)存有些類似,通過內(nèi)存映射文件可以保留一個地址空間的區(qū)域,同時(shí)將物理存儲器提交給此區(qū)域,內(nèi)存文件映射的物理存儲器來自一個已經(jīng)存在于磁盤上的文件,而且在對該文件進(jìn)行操作之前必須首先對文件進(jìn)行映射。使用內(nèi)存映射文件處理存儲于磁盤上的文件時(shí),將不必再對文件執(zhí)行I/O操作,使得內(nèi)存映射文件在處理大數(shù)據(jù)量的文件時(shí)能起到相當(dāng)重要的作用。
2. 實(shí)現(xiàn)
#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;
}
相關(guān)文章
C++實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)框架SimpleNN的詳細(xì)過程
本來自己想到用C++實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)主要是想強(qiáng)化一下編碼能力并入門深度學(xué)習(xí),對C++實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)框架SimpleNN的詳細(xì)過程感興趣的朋友一起看看吧2021-08-08
C/C++讀取大文件數(shù)據(jù)方式詳細(xì)講解
這篇文章主要介紹了C語言/C++讀取大文件數(shù)據(jù)的完整方式過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
C++項(xiàng)目求Fibonacci數(shù)列的參考解答
今天小編就為大家分享一篇關(guān)于C++項(xiàng)目求Fibonacci數(shù)列的參考解答,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02

