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)存映射文件,是由一個(gè)文件到一塊內(nèi)存的映射。Win32提供了允許應(yīng)用程序把文件映射到一個(gè)進(jìn)程的函數(shù) (CreateFileMapping)。內(nèi)存映射文件與虛擬內(nèi)存有些類似,通過內(nèi)存映射文件可以保留一個(gè)地址空間的區(qū)域,同時(shí)將物理存儲器提交給此區(qū)域,內(nèi)存文件映射的物理存儲器來自一個(gè)已經(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++只保留float型的小數(shù)點(diǎn)后兩位問題
這篇文章主要介紹了c++只保留float型的小數(shù)點(diǎn)后兩位問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C語言的數(shù)據(jù)結(jié)構(gòu)之樹、森連、二叉樹之間的轉(zhuǎn)換圖解
這篇文章主要介紹了C語言的數(shù)據(jù)結(jié)構(gòu)之樹、森連、二叉樹之間的轉(zhuǎn)換詳解,數(shù)據(jù)是信息的載體,是描述客觀事物屬性的數(shù)、字符以及所有能輸入到計(jì)算機(jī)中并被程序識別和處理的符號的集合,需要的朋友可以參考下2023-07-07C語言實(shí)現(xiàn)自動(dòng)給QQ好友發(fā)窗口抖動(dòng)
這篇文章主要介紹了C語言實(shí)現(xiàn)自動(dòng)給QQ好友發(fā)窗口抖動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲的實(shí)例
這篇文章主要介紹了C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲的實(shí)例的相關(guān)資料,M*N的矩陣,矩陣中有效值的個(gè)數(shù)遠(yuǎn)小于無效值的個(gè)數(shù),且這些數(shù)據(jù)的分布沒有規(guī)律,需要的朋友可以參考下2017-07-07C++?STL標(biāo)準(zhǔn)庫std::vector擴(kuò)容時(shí)進(jìn)行深復(fù)制原因詳解
我們知道,std::vector之所以可以動(dòng)態(tài)擴(kuò)容,同時(shí)還可以保持順序存儲,主要取決于其擴(kuò)容復(fù)制的機(jī)制。當(dāng)容量滿時(shí),會重新劃分一片更大的內(nèi)存區(qū)域,然后將所有的元素拷貝過去2022-08-08C++11中l(wèi)onglong超長整型和nullptr初始化空指針
本文介紹?C++11?標(biāo)準(zhǔn)中新添加的?long?long?超長整型和?nullptr?初始化空指針,在?C++11?標(biāo)準(zhǔn)下,相比?NULL?和?0,使用?nullptr?初始化空指針可以令我們編寫的程序更加健壯,本文結(jié)合示例代碼給大家詳細(xì)講解,需要的朋友跟隨小編一起看看吧2022-12-12