亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        win32下使用內(nèi)存映射文件

        字號(hào):

        映射文件把虛擬可尋址空間映射到文件上。整個(gè)文件就可以很容易的訪問,就像它在內(nèi)存中一樣。但是它實(shí)質(zhì)還是在硬盤中,只是需要的時(shí)候載入需要的部分到內(nèi)存,這樣可以節(jié)約物理內(nèi)存的使用。windows 使用 這個(gè)來(lái)加載EXE和DLL,所以這個(gè)因該是高效的。windows下默認(rèn)的虛擬內(nèi)存頁(yè)最小是512KB,所以對(duì)512KB以下的文件使用就是多余的低效的。
            按照以下步驟使用
            1. 調(diào)用CreateFile打開您想要映射的文件。
            2. 調(diào)用CreateFileMapping,其中要求傳入先前CreateFile返回的句柄,該函數(shù)生成一個(gè)建立在CreateFile函數(shù)創(chuàng)建的文件對(duì)象基礎(chǔ)上的內(nèi)存映射對(duì)象。
            3. 調(diào)用MapViewOfFile函數(shù)映射整個(gè)文件的一個(gè)區(qū)域或者整個(gè)文件到內(nèi)存。該函數(shù)返回指向映射到內(nèi)存的第一個(gè)字節(jié)的指針。
            4. 用該指針來(lái)讀寫文件。
            5. 調(diào)用UnmapViewOfFile來(lái)解除文件映射。
            6. 調(diào)用CloseHandle來(lái)關(guān)閉內(nèi)存映射文件。注意必須傳入內(nèi)存映射文件的句柄。
            7. 調(diào)用CloseHandle來(lái)關(guān)閉文件。注意必須傳入由CreateFile創(chuàng)建的文件的句柄。
            /////////////////////////////////////////////
            //為了簡(jiǎn)單 省略錯(cuò)誤檢查
            //建一個(gè)test.txt的文本文件做實(shí)驗(yàn)
            //這里只演示讀取操作
            //win32 console 程序
            //winXP+vc6
            //write by DKink|棼紫
            //2007.10.09
            #include "stdafx.h"
            #include
            #include
            int main(int argc, char* argv[])
            {
             TCHAR *fileName =_T("test.txt");
             //--------------------------------------
             //打開文件
             HANDLE fileHandle = CreateFile(
             fileName,
             GENERIC_READ,
             FILE_SHARE_READ,
             NULL,
             OPEN_EXISTING,//文件必須存在
             0,
             NULL);
             //--------------------------------------
             //從文件創(chuàng)建映射對(duì)象
             HANDLE fileMapping = CreateFileMapping(
             fileHandle,
             NULL,
             PAGE_READONLY,
             0,
             0,
             NULL);
             //---------------------------------------
             //把文件映射到指針(為什么用char,因?yàn)檫@個(gè)大小是一個(gè)Byte)
             char *fileBase = (char *) MapViewOfFile(
             fileMapping,
             FILE_MAP_READ,
             0,
             0,
             0);
             //---------------------------------------
             //使用數(shù)據(jù)
             MessageBox(NULL,fileBase,"MTest",MB_OK);//這句可能有溢出,正常情況誤用。
             UnmapViewOfFile(fileBase);//解除文件映射
             CloseHandle(fileMapping);//關(guān)閉內(nèi)存映射文件
             CloseHandle(fileHandle);//關(guān)閉文件
             return 0;
            }