这里不介绍如何创建共享内存,如果想知道百度一下就好了。只介绍一下如何使用这一段连续的共享内存空间。思路就是利用结构体。

创建一个结构体,它的大小可以用sizeof()获取。注意这里有一个四字节对齐的问题,所以结构体的大小不仅仅是结构体内变量所占内存的简单相加。

思路:你创建一个结构体,无论你的结构体怎样,利用memcpy函数配合sizeof将结构体变量,copy到共享内存中然后,用的时候再用memcpy从共享内存copy到结构体中就行了。

一个例子如下:

#include

#include

//#include <>

typedef struct

{

int i;

char ch[1];

float a;

}data, *dataptr;

int main(int argc, char const *argv[])

{

char buf[255]={0};//利用这个buf,充当共享的内存空间。

data stu1;

data stu2;

stu1.i = 12;

stu1.ch[0]='a';

stu1.a = 1.2;

memcpy(buf, &stu1, sizeof(stu1));//copy到内存

memcpy(&stu2, buf, sizeof(stu1));//copy回结构体变量

printf("%d\n", stu2.i);

printf("%c\n", stu2.ch[0]);

printf("%f\n", stu2.a);

printf("%ld\n",sizeof(float)+sizeof(int)+sizeof(char));//

printf("%d\n", sizeof(stu1));//

return 0;

}

这样你可以在共享内存中使用任何类型的变量了。

最后两个printf函数打印的数值不同,是因为四字节对齐。前一个打印是9,后一个打印是12,是四的倍数。你把data结构体中的ch数组大小该为5,再看一下打印结果。

c语言共享内存储存结构体,C语言共享内存使用思路利用结构体相关推荐

  1. C语言里的4种存储类别,C语言中变量储存的类别

    C语言中变量储存的类别 C语言根据变量的生存周期来划分,可以划分为静态存储方式和动态存储方式. C语言中变量储存的类别 静态存储方式:是指在程序的运行期间分配固定的存储空间的方式.静态存储区中存储放了 ...

  2. 论文解读:利用结构隐代码的隐神经表示方法来合成动态人体的新颖视角

    从稀疏多视点视频合成表演者新颖视角图像.数据输入是通过同步的RGB相机捕获的表演者视频.体神经捕获表演者的3D几何和外表,用来进行3D重建和新颖视角合成. 01 摘要 本论文主要解决在稀疏排列相机情况 ...

  3. C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示

    目录 结构化数据表示 一.内存地址: 二.全局变量和局部变量的内存布局 三.数据在内存中的表示 四.数组在内存中的表示 五.字符串在内存中的表示 六.结构和联合在内存中的表示 结构化数据表示 一.内存 ...

  4. new 一个结构体数组_C语言结构体到底占多少内存?简单!一文助你解决结构体内存问题...

    前言 本文主要介绍的是C/C++中 结构体的所占用内存问题做以分析,希望对于广大读者有一些帮助.在编写C语言一下程序的时候: struct data{int iNum;float fNum;long ...

  5. c语言结构体数组内存大小,如何为C语言的结构体数组分配/释放内存?

    如何为C语言的结构体数组分配/释放内存? struct emp { char name[10]; float salary; }; int main(int argc,char* argv[]) { ...

  6. C语言《认识结构体》---重点解析内存对齐

    文章目录 结构体 一.结构体概念 二.结构体声明 (1).特殊声明 三.结构体变量的定义和初始化 (1).定义初始化例子1 (2).定义初始化例子2: (3).结构嵌套 四.结构体自引用 (1). 结 ...

  7. c语言结构体在内存中的存储,C语言结构体在内存中的存储情况探究------内存对齐...

    条件(先看一下各个基本类型都占几个字节): voidsize_(){ printf("char类型:%d", sizeof(char)); printf("int类型:% ...

  8. c语言动态分配输出学生成绩,C语言之:结构体动态分配内存(利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号、姓名和三门课(高数、物理和英语 )的成绩和平均分(整型)。)...

    题目内容: 利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号.姓名和三门课(高数.物理和英语 )的成绩和平均分(整型). 编写程序,从键盘输入学生的人数,然后依次输入每个学生的学号. ...

  9. NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构...

    本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存 ...

最新文章

  1. Numpy 统计变量(平均值、标准差、方差、最大、最小、和、乘积、对角线和)
  2. 10款屏幕取色器/颜色拾取工具软件介绍及下载地址[转]
  3. 优秀教程:创建基于 Ajax 的文件拖放上传功能
  4. 前端基础--jquery操作元素
  5. Asp.net core使用IIS在windows上进行托管
  6. FPS手游《战地先锋》性能案例精讲
  7. Serverless 实战 —— Funcraft + OSS + ROS 进行 CI/CD
  8. NLP简报(Issue#7)
  9. mysql由浅入深_由浅入深—MySQL数据库
  10. Eclipse取消Process Validating
  11. 为什么Hadoop将一定会是分布式计算的未来?
  12. 拓端tecdat|R语言有极值(EVT)依赖结构的马尔可夫链(MC)对洪水极值分析
  13. 【Leetcode 136】Single Number
  14. (pyqt5 qml qt quick) QAbstractTableModel.columnCount() is abstract and must be overridden
  15. C++利用Zip库解压缩文件
  16. Drive-by Compromise 术语名词概念
  17. swf to html5 movie maker,楠妈妈教大家用windowsxp自带的Movie maker软件做视频
  18. robot framework 实例:126邮箱登录
  19. win7不显示移动硬盘_Mac 下移动硬盘异常退出修复
  20. 我们使用 Kafka 生产者在发消息的时候我们关注什么(Python 客户端 1.01 broker)...

热门文章

  1. 小小智慧树机器人_中国工厂番外篇丨AGV机器人演绎智能“搬运工”
  2. php 微商城 开源,微商城开通为什么选php开源网店系统
  3. 高并发服务设计——缓存(转载)
  4. 第六篇 JVM核心机制之JVM运行和类加载全过程(一)
  5. 适配器模式真的很简单
  6. Verify an App Store Transaction Receipt 【苹果服务端 验证一个应用程序商店交易收据有效性】...
  7. 简单的C#字符串数组转字符串方法
  8. Java实现两个csv文件的对比_Java实现CSV文件差异对比
  9. ie运行不了java脚本界面_IE浏览器不能运行js JS代码失效不能运行了如何解决
  10. 使用Python把PowerPoint文件转换为配乐MP4视频