1、前言
共享内存(Shared Memory)是一种高效的跨进程通信方式,尤其适用于同一台计算机上的进程之间的高速数据传输。与套接字相比,共享内存允许多个进程直接访问同一块内存区域,减少了数据传输的中间步骤,适合需要高性能和低延迟的场景。本文将介绍如何在 C# 和 C++ 之间通过共享内存实现跨进程通信,并附上完整的示例代码。
2、什么是共享内存?
共享内存是一种在操作系统中分配的内存区域,允许多个进程对该内存区域进行读写。不同于管道或套接字,数据不需要被复制到缓冲区中进行传输,而是直接由各个进程访问内存数据,从而提高了数据传输效率。
3、实现步骤
- C++ 进程:创建共享内存区域,将数据写入内存。
- C# 进程:打开该共享内存区域,从内存中读取数据。
4、示例代码
以下代码展示了一个 C++ 进程创建并写入共享内存,另一个 C# 进程读取该共享内存中的数据。
C++ 代码:创建并写入共享内存
使用 Windows API 创建共享内存,并将数据写入共享内存区域。
#include <windows.h>
#include <iostream>
#include <cstring>
int main() {
const char* sharedMemoryName = "Local\\MySharedMemory";
const char* message = "Hello from C++!";
// 创建共享内存
HANDLE hMapFile = CreateFileMappingA(
INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
256,
sharedMemoryName
);