您的位置:首页 >C++共享内存怎么用|详细使用教程
发布于2026-01-06 阅读(0)
扫一扫,手机访问
答案:C++中通过POSIX共享内存实现高效进程间通信,使用shm_open创建、mmap映射、munmap解除并shm_unlink删除,需配合同步机制避免竞态。

在C++中使用共享内存,主要是为了实现进程间高效的数据共享。共享内存允许多个进程访问同一块物理内存区域,避免了频繁的数据拷贝,适合对性能要求较高的场景。在Linux系统下,通常使用POSIX共享内存或System V共享内存接口。下面介绍基于POSIX的方式,因为它更现代、易用。
使用POSIX共享内存需要包含sys/mman.h、fcntl.h和unistd.h等头文件。
步骤如下:
示例代码(创建并写入):
#include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <iostream> #include <cstring>int main() { const char* name = "/my_shared_memory"; const size_t size = 4096;
// 创建共享内存对象 int fd = shm_open(name, O_CREAT | O_RDWR, 0666); if (fd == -1) { perror("shm_open"); return 1; } // 设置大小 if (ftruncate(fd, size) == -1) { perror("ftruncate"); return 1; } // 映射内存 void* ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (ptr == MAP_FAILED) { perror("mmap"); return 1; } // 写入数据 const char* msg = "Hello from process!"; std::strcpy((char*)ptr, msg); std::cout << "Data written to shared memory.\n"; // 解除映射 munmap(ptr, size); close(fd); return 0;}
另一个进程可以以只读或读写方式打开同一个共享内存对象,进行数据读取或修改。
示例代码(读取数据):
#include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <iostream>int main() { const char* name = "/my_shared_memory"; const size_t size = 4096;
// 打开已存在的共享内存 int fd = shm_open(name, O_RDONLY, 0); if (fd == -1) { perror("shm_open read"); return 1; } // 映射内存 void* ptr = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0); if (ptr == MAP_FAILED) { perror("mmap read"); return 1; } // 读取并输出 std::cout << "Read from shared memory: " << (char*)ptr << "\n"; // 清理 munmap(ptr, size); close(fd); return 0;}
使用完毕后,应解除映射并删除共享内存对象,防止资源泄漏。
清理示例:
// 在写入进程结束前或单独脚本中调用
shm_unlink("/my_shared_memory");
注意:共享内存不提供同步机制,若多个进程同时读写,需配合使用信号量或互斥锁来避免竞态条件。
基本上就这些。只要按步骤创建、映射、读写和清理,就能在C++中顺利使用共享内存。
上一篇:无痕模式真能保护隐私吗?
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9