用长度为0的数组管理共享内存
来源:互联网 发布:曼陀罗记忆知乎 编辑:程序博客网 时间:2024/05/21 20:28
gnu支持长度为0的数组,一般用来表示结构体或者类的最后一个数据成员,这样的数据成员不占任何空间并指向所在结构体或者类对象的下一个字节.下面示例代码显示了通过共享内存管理两块数据空间,每个数据由一个DataMgr来管理,而DataMgr中的data这个成员正式一个长度为0的数组,他指向了数据空间的首地址。
#include<iostream>#include<sys/shm.h>using namespace std;struct Data{uint32_t mgridx;uint32_t width;};struct DataMgr{uint32_t maxlen;uint32_t curlen;Data data[0];////长度为0的数组不占任何空间,他指向所属DataMgr对象的下一个字节};int main(){DataMgr* pDataMgrs[2];uint32_t mgrnum=2;uint32_t datanum=3;uint32_t totalmemlen=(sizeof(DataMgr)+sizeof(Data)*datanum)*mgrnum;////sizeof(DataMgr)=8,因为长度为0的数组不占任何空间cout<<"totalmemlen="<<totalmemlen<<endl;//分配64字节的共享内存uint32_t shmkey=20150114;int shmid=shmget(shmkey,totalmemlen, 0666|IPC_CREAT);uint32_t* pbuf=(uint32_t*)shmat(shmid,NULL,0);////在共享内存上构建两个mgrpDataMgrs[0]=(DataMgr*)(pbuf);pDataMgrs[1]=(DataMgr*)((uint8_t*)pbuf+(sizeof(DataMgr)+sizeof(Data)*datanum));for(uint32_t i=0;i<2;i++)/////为共享内存赋值{pDataMgrs[i]->maxlen=datanum;pDataMgrs[i]->curlen=datanum;for(uint32_t j=0;j<pDataMgrs[i]->maxlen;j++){pDataMgrs[i]->data[j].mgridx=i+1;pDataMgrs[i]->data[j].width=(i+1)*100;}}for(uint32_t i=0;i<2;i++)////打印赋值{for(uint32_t j=0;j<pDataMgrs[i]->maxlen;j++){cout<<pDataMgrs[i]->data[j].mgridx<<" "<<pDataMgrs[i]->data[j].width<<endl;;}}for(uint32_t i=0;i<totalmemlen/4;i++)////每4个字节打印下共享内存{cout<<"mem addr is:"<<pbuf+i<<",data is "<<*(pbuf+i)<<endl;}}
执行的结果为:
0 0
- 用长度为0的数组管理共享内存
- new内存时,数组长度为0
- 长度为0的数组
- 长度为0的数组
- 长度为0数组
- 数组长度为0和数组为null的区别
- 长度为0的动态数组
- C语言长度为0的数组
- php 长度为0的数组
- 长度为0的数组和 null
- 浅析长度为0的数组
- 柔性数组成员 长度为0的数组
- 数组的内存管理
- C语言长度为0的数组的使用
- 长度为0的字符数组的赋值
- c语言中长度为0的数组妙用
- C语言中长度为0的数组
- struct中长度为0的数组用途与原理
- struts2 中的 checkboxlist 使用,value="" 的值是一个数组,disabled 设置不可编辑
- Java中@Override的作用
- 几个开放API接口
- Android性能优化典范(一)
- 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
- 用长度为0的数组管理共享内存
- Android主界面退出再次进入略过欢迎面
- sublime text 2编译Python时打印中文报错的解决方案
- 使用Eclipse构建Maven项目 (step-by-step)
- eclipse下gradle配置
- C_C++变量命名规则
- 如何屏蔽百度蜘蛛呢?
- MongoDB 初步使用
- 从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法