这里不介绍如何建立共享内存,若是想知道百度一下就行了。只介绍一下如何使用这一段连续的共享内存空间。思路就是利用结构体。
数组
建立一个结构体,它的大小能够用sizeof()获取。注意这里有一个四字节对齐的问题,因此结构体的大小不单单是结构体内变量所占内存的简单相加。
函数
思路:你建立一个结构体,不管你的结构体怎样,利用memcpy函数配合sizeof将结构体变量,copy到共享内存中而后,用的时候再用memcpy从共享内存copy到结构体中就好了。code
一个例子以下:内存
#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; }
这样你能够在共享内存中使用任何类型的变量了。
string
最后两个printf函数打印的数值不一样,是由于四字节对齐。前一个打印是9,后一个打印是12,是四的倍数。你把data结构体中的ch数组大小该为5,再看一下打印结果。
io