• 247查看
  • 0回复

[综合] 怎么来做共享内存来降低数据的搬运拷贝

[复制链接]


该用户从未签到

发表于 9-4-2024 19:36:57 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


共享内存是一种高效的进程间通信方式,可以实现进程之间的数据共享和交换,适合需要频繁读写大量数据的场景,提高系统的性能和效率。

共享内存是指多个进程可以访问同一块内存区域的技术。在操作系统中,共享内存是一种进程间通信的方式,可以实现进程之间的数据共享,提高数据访问的效率和速度,通常情况下我们是在linux系统下跑的程序,因此我们进行示例解释
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/ipc.h>#include<sys/shm.h>
#define SHM_SIZE 1024
intmain(){key_t key = ftok("shared_memory_example", 1);int shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666);
if (shmid == -1) {        perror("shmget");exit(1);    }
char *shared_memory = shmat(shmid, NULL, 0);if (shared_memory == (char *)-1) {        perror("shmat");exit(1);    }
// 写入数据到共享内存strcpy(shared_memory, "Hello, shared memory!");
// 创建一个新进程pid_t pid = fork();
if (pid < 0) {        perror("fork");exit(1);    } elseif (pid == 0) {// 子进程读取并输出共享内存中的数据printf("Child process: %s\n", shared_memory);    } else {// 等待子进程结束        wait(NULL);    }
// 分离共享内存    shmdt(shared_memory);
// 删除共享内存段    shmctl(shmid, IPC_RMID, NULL);
return0;}
在这个示例程序中,首先使用ftok()函数生成一个键值,然后使用shmget()函数创建一个共享内存段。接着使用shmat()函数将共享内存段映射到进程的地址空间中,进程可以通过共享内存地址对共享内存进行读写操作。一个进程写入数据到共享内存中,另一个进程读取并输出数据。最后,使用shmdt()函数分离共享内存,使用shmctl()函数删除共享内存段。

请注意,该示例程序只是演示了共享内存的基本用法,实际应用中需要考虑进程间同步和互斥等问题。

怎么来做共享内存来降低数据的搬运拷贝w3.jpg

怎么来做共享内存来降低数据的搬运拷贝w4.jpg



    来区分一下这些算力单位:TOPS、FLOPS、MIPS、DMIPS

    思考一个程序设计问题:单核多线程的意义是什么?

    接上一篇:多核单线程和多核多线程是个咋!



引用 Refreences
本文由不架构的汽车电子电气原创,作者:Feynman-Yang。文中部分图片、封面图片来自网络截图,如因版权等有疑问,请于本文刊发30日内联系。©不架构的汽车电子电气微信公众账号 保留所有权利作者:92年,一个北方的汉子,汽车电子电气系统的工程师,一个带有三分浪漫主义,七分实用主义的90后,希望在这结识更多的朋友和伙伴,在这个领域遇到更多的高手和专家。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 22-12-2024 16:31 , Processed in 0.235045 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.