共享内存(Shared Memory)是进程间通信(IPC, Inter-Process Communication)的一种高效方式。 它允许多个进程直接访问同一块物理内存区域,从而实现数据共享,效率远高于管道或消息队列。
一、共享内存原理
在 Windows 系统中,共享内存通过 文件映射对象(File Mapping Object) 实现。
核心思想是:
- 由一个进程创建一个 命名的内存映射文件;
- 其他进程通过该名称 打开同一个映射对象;
- 通过
MapViewOfFile()函数把这段共享区域映射到自己进程的虚拟地址空间; - 各进程即可读写同一段内存,实现数据共享。
二、服务端程序(创建并写入共享内存)
1. 代码示例
#include <iostream>
#include <Windows.h>
using namespace std;
#define BUF_SIZE 1024
int main() {
// 要共享的数据
char szBuffer[] = "C/C++";
// 1. 创建共享文件映射对象
HANDLE hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // 使用系统分页文件
NULL, // 默认安全属性
PAGE_READWRITE, // 可读可写
0, // 高 32 位文件大小
BUF_SIZE, // 共享内存大小
L"LSEDU" // 共享内存名称(标识)
);
if (hMapFile == NULL) {
cout << "创建共享内存失败!错误码:" << GetLastError() << endl;
return 0;
}
LPVOID lpBase = (
hMapFile,
FILE_MAP_ALL_ACCESS,
, ,
BUF_SIZE
);
(lpBase == ) {
cout << << () << endl;
(hMapFile);
;
}
((*)lpBase, szBuffer);
cout << << (*)lpBase << endl << endl;
();
(lpBase);
(hMapFile);
;
}

