CreateFileMapping函数实现了共享内存,其用法如下:
- 首先需要调用CreateFileMapping函数创建一个文件映射对象,该函数的原型如下:
HANDLE CreateFileMapping(
HANDLE hFile, // 文件句柄,可为INVALID_HANDLE_VALUE
LPSECURITY_ATTRIBUTES lpAttributes,// 安全属性,NULL表示使用默认安全描述符
DWORD flProtect, // 内存保护标志,如PAGE_READWRITE
DWORD dwMaximumSizeHigh, // 文件映射对象的最大大小高32位
DWORD dwMaximumSizeLow, // 文件映射对象的最大大小低32位
LPCTSTR lpName // 文件映射对象的名称
);
- 创建成功后,可以通过调用MapViewOfFile函数将文件映射对象映射到当前进程的地址空间,该函数的原型如下:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // 文件映射对象句柄
DWORD dwDesiredAccess, // 访问权限,如FILE_MAP_ALL_ACCESS
DWORD dwFileOffsetHigh, // 文件偏移高32位
DWORD dwFileOffsetLow, // 文件偏移低32位
SIZE_T dwNumberOfBytesToMap // 映射的字节数
);
- 映射成功后,可以直接使用返回的指针来访问共享内存。当不再需要访问共享内存时,需要调用UnmapViewOfFile函数取消映射,该函数的原型如下:
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress // 共享内存的基地址
);
- 当进程不再需要使用共享内存时,需要调用CloseHandle函数关闭文件映射对象的句柄,该函数的原型如下:
BOOL CloseHandle(
HANDLE hObject // 文件映射对象句柄
);
通过以上的函数调用,就可以实现共享内存的创建、映射、访问和释放。共享内存可以在不同的进程之间进行数据交换,提高进程间通信的效率。