以文件為后背存儲區(qū)的內(nèi)存交換文件
各種后備存儲器的內(nèi)存映射文件
- 以
磁盤中文件系統(tǒng)的具體文件
為后備存儲的頁交換文件(文件映射) - 以
頁交換文件("虛擬內(nèi)存")
為后備存儲器的頁交換文件(共享內(nèi)存)
頁交換文件("虛擬內(nèi)存")
通過CreateFileMapping
api 創(chuàng)建文件映射內(nèi)核對象,在內(nèi)存中申請空間(物理內(nèi)存和虛擬內(nèi)存)
通過MapViewOfFile
在響應的進程虛擬內(nèi)存空間中預定對應空間厚脉,并且把上一步的內(nèi)存映射到進程虛擬空間中习寸。
這樣就實現(xiàn)了共享內(nèi)存
具體磁盤文件
CreateFileMapping
直接映射文件到進程虛擬空間中
映象類型的內(nèi)存塊和映射類型的內(nèi)存塊
映象類型的文件類型需要exe dll等文件
而映射類型則只要是打開的文件都可以。
操作文件需要用到的api
//創(chuàng)建或打開指定文件的文件映射對象
HANDLE CreateFile
(
LPCTSTR lpFileName, // 文件路徑
DWORD dwDesiredAccess, // 訪問權(quán)限
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD
DWORD dwCreationDisposition, // 創(chuàng)建/打開方式
DWORD dwFlagsAndAttributes, // 文件屬性
HANDLE hTemplateFile // 模板相關(guān)
);
//創(chuàng)建或打開指定文件的文件映射對象
HANDLE CreateFileMapping
(
HANDLE hFile, // 要映射的文件句柄 LPSECURITY_ATTRIBUTES lpAttributes, // 安全屬性
DWORD flProtect, // 保護屬性
DWORD dwMaximumSizeHigh, // 映射區(qū)域最大大小高32位
DWORD dwMaximumSizeLow, // 映射區(qū)域最大大小低32位 LPCTSTR lpName // 映射對象的名字
);
//創(chuàng)建映射
LPVOID MapViewOfFile
(
HANDLE hFileMappingObject,// 文件映射對象句柄
DWORD dwDesiredAccess, // 訪問的保護屬性 DWORD dwFileOffsetHigh, // 映射的內(nèi)容在文件中的偏移
DWORD dwFileOffsetLow, // 映射的內(nèi)容在文件中的偏移 類似于 offset
SIZE_T dwNumberOfBytesToMap // 映射的文件內(nèi)容大小 類似于 limit
);