标签:
这里不介绍如何创建共享内存,如果想知道百度一下就好了。只介绍一下如何使用这一段连续的共享内存空间。思路就是利用结构体。
创建一个结构体,它的大小可以用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