首页 > 其他 > 详细

共享内存的申请和释放

时间:2019-07-07 15:19:50      阅读:135      评论:0      收藏:0      [点我收藏+]

1.通过映射来申请内存

物理页可以在多个进程中共享;

 

 

 

CreateFileMapping函数用于创建一个文件映射内核对象

HANDLE CreateFileMapping(
  HANDLE hFile,                       //物理文件句柄
  LPSECURITY_ATTRIBUTES lpAttributes, //安全设置
  DWORD flProtect,                    //保护设置
  DWORD dwMaximumSizeHigh,            //高位文件大小
  DWORD dwMaximumSizeLow,             //低位文件大小
  LPCTSTR lpName                      //共享内存名称
);

 

 

MapViewOfFile是计算机函数,功能是将一个文件映射对象映射到当前应用程序的地址空间。MapViewOfFileEx允许我们指定一个基本地址来进行映射。

LPVOID WINAPI MapViewOfFile(
  __in HANDLE hFileMappingObject,  // 为CreateFileMapping()返回的文件映像对象句柄。
  __in DWORD dwDesiredAccess,   //映射对象的文件数据的访问方式
  __in DWORD dwFileOffsetHigh,  //表示文件映射起始偏移的高32位.
  __in DWORD dwFileOffsetLow,  //表示文件映射起始偏移的低32位.(64KB对齐不是必须的)
  __in SIZE_T dwNumberOfBytesToMap   //指定映射文件的字节数.
  );

需要和

//关闭映射
UnmapViewOfFile(g_lpBuff); 

配套使用;

 

 1 // 共享内存的申请.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <windows.h>
 6 #define MapFileName "共享内存"
 7 #define BUF_SIZE 0x1000
 8 
 9 HANDLE g_hMapFile;
10 LPTSTR g_lpBuff;
11 
12 int main()
13 {
14     getchar();
15     //内核对象:物理页,准备好物理页还没建立关联
16     g_hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE,(LPCWSTR) MapFileName);
17     //将物理页与线性地址进行映射,进行关联
18     //映射时候如果创建的物理页只读,但是映射时权限设置成可写,则函数失败
19     g_lpBuff = (LPTSTR)MapViewOfFile(g_hMapFile, FILE_MAP_WRITE, 0, 0, BUF_SIZE);
20 
21     
22     
23     *(PDWORD)g_lpBuff = 0x12345678;
24     printf("%p", g_lpBuff);
25     
26     getchar();
27 
28     //关闭映射
29     UnmapViewOfFile(g_lpBuff);
30     //关闭句柄
31     CloseHandle(g_hMapFile);
32     getchar();
33 
34     return 0;
35 }

 

共享内存的申请和释放

原文:https://www.cnblogs.com/hanhandaren/p/11146257.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!