共享内存申请和释放

it2025-03-28  8

文章目录

私有内存:独占物理页 共享内存:和别人共享物理页

CreateFileMapping( INVALID_HANDLE_VALUE,//为INVALID_HANDLE_VALUE时,不与文件关联 NULL, //安全描述符 PAGE_READWRITE, //保护模式(读写的权限) 0, //32位通常为空 BUFSIZ, //物理页的大小 MapFileName //指定文件映射对象的名字 ); g_lpBuff = (LPTSTR)MapViewOfFile( g_hMapFile, //句柄 FILE_MAP_ALL_ACCESS,//虚拟内存读写权限 0, //32位用不上 0, //从哪开始映射 BUFSIZ //物理页多大它就多大 ); #include "stdafx.h" #include "windows.h" #define MapFileName "ZZZ" #define BUF_SIZE 0x1000 HANDLE g_hMapFile; LPTSTR g_lpBuff; int main(int argc, char* argv[]) { getchar(); //内核对象,创建物理页 g_hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,BUFSIZ,MapFileName); //将物理页与线性地址进行映射,g_lpBuff就是虚拟内存地址 g_lpBuff = (LPTSTR)MapViewOfFile(g_hMapFile,FILE_MAP_ALL_ACCESS,0,0,BUFSIZ); DWORD eror = GetLastError(); *(PDWORD)g_lpBuff = 0x12345678;//往虚拟内存地址存值 printf("%p",g_lpBuff); getchar(); //关闭映射,物理页的计数器只会减一 UnmapViewOfFile(g_lpBuff); //关闭句柄 CloseHandle(g_hMapFile); getchar(); return 0; }

对应三个getchar()

演示: test

#include "stdafx.h" #include "windows.h" #define MapFileName "ZZZ" #define BUF_SIZE 0x1000 HANDLE g_hMapFile; LPTSTR g_lpBuff; int main(int argc, char* argv[]) { //内核对象,创建物理页 g_hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,BUFSIZ,MapFileName); //将物理页与线性地址进行映射,g_lpBuff就是虚拟内存地址 g_lpBuff = (LPTSTR)MapViewOfFile(g_hMapFile,FILE_MAP_ALL_ACCESS,0,0,BUFSIZ); DWORD eror = GetLastError(); *(PDWORD)g_lpBuff = 0x12345678;//往虚拟内存地址存值 printf("%p",g_lpBuff); getchar(); //关闭映射 UnmapViewOfFile(g_lpBuff); //关闭句柄 CloseHandle(g_hMapFile); getchar(); return 0; }

test1:

#include "stdafx.h" #include "windows.h" #define MapFileName "ZZZ" #define BUF_SIZE 0x1000 HANDLE g_hMapFile; LPTSTR g_lpBuff; int main(int argc, char* argv[]) { g_hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,BUFSIZ,MapFileName); //将物理页与线性地址进行映射,g_lpBuff就是虚拟内存地址 g_lpBuff = (LPTSTR)MapViewOfFile(g_hMapFile,FILE_MAP_ALL_ACCESS,0,0,BUFSIZ); printf("进程B:%x",*(PDWORD)g_lpBuff); //关闭映射 UnmapViewOfFile(g_lpBuff); //关闭句柄 CloseHandle(g_hMapFile); getchar(); return 0; }

最新回复(0)