首页 > 后端开发 > C++ > 正文

c++怎么使用共享内存_c++共享内存使用方法

裘德小鎮的故事
发布: 2025-09-30 11:45:02
原创
400人浏览过
答案:C++中通过POSIX共享内存实现高效进程间通信,使用shm_open创建、mmap映射、munmap解除并shm_unlink删除,需配合同步机制避免竞态。

c++怎么使用共享内存_c++共享内存使用方法

在C++中使用共享内存,主要是为了实现进程间高效的数据共享。共享内存允许多个进程访问同一块物理内存区域,避免了频繁的数据拷贝,适合对性能要求较高的场景。在Linux系统下,通常使用POSIX共享内存或System V共享内存接口。下面介绍基于POSIX的方式,因为它更现代、易用。

创建和映射共享内存

使用POSIX共享内存需要包含sys/mman.hfcntl.hunistd.h等头文件。

步骤如下:

  • 使用shm_open()创建或打开一个共享内存对象,返回文件描述符。
  • 使用ftruncate()设置共享内存的大小。
  • 使用mmap()将共享内存映射到当前进程的地址空间。

示例代码(创建并写入):

立即学习C++免费学习笔记(深入)”;

#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
#include <cstring>
<p>int main() {
const char* name = "/my_shared_memory";
const size_t size = 4096;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">// 创建共享内存对象
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;
登录后复制

}

访问已存在的共享内存

另一个进程可以以只读或读写方式打开同一个共享内存对象,进行数据读取或修改。

存了个图
存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17
查看详情 存了个图

示例代码(读取数据):

#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
<p>int main() {
const char* name = "/my_shared_memory";
const size_t size = 4096;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">// 打开已存在的共享内存
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;
登录后复制

}

清理共享内存

使用完毕后,应解除映射并删除共享内存对象,防止资源泄漏。

  • 调用munmap()解除映射。
  • 调用shm_unlink()删除共享内存名称,当所有进程都关闭后,系统会自动释放资源。

清理示例:

// 在写入进程结束前或单独脚本中调用
shm_unlink("/my_shared_memory");
登录后复制

注意:共享内存不提供同步机制,若多个进程同时读写,需配合使用信号量或互斥锁来避免竞态条件。

基本上就这些。只要按步骤创建、映射、读写和清理,就能在C++中顺利使用共享内存。

以上就是c++++怎么使用共享内存_c++共享内存使用方法的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号