标签:
这里不介绍如何创建共享内存,如果想知道百度一下就好了。只介绍一下如何使用这一段连续的共享内存空间。思路就是利用结构体。
创建一个结构体,它的大小可以用sizeof()获取。注意这里有一个四字节对齐的问题,所以结构体的大小不仅仅是结构体内变量所占内存的简单相加。
思路:你创建一个结构体,无论你的结构体怎样,利用memcpy函数配合sizeof将结构体变量,copy到共享内存中然后,用的时候再用memcpy从共享内存copy到结构体中就行了。
一个例子如下:
#include <string.h>
#include <stdio.h>
//#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,再看一下打印结果。
标签:
原文地址:http://my.oschina.net/u/2255341/blog/512108