如何将多个结构实例存储在共享内存中?
How to store the multiple structures instances in shared memory?
我有一个结构定义如下
struct s
{
int a;
};
struct s s1;
struct s s2;
我需要将两个结构实例推送到共享内存。
char *data=(char *)shmat(m_sharedMemoryId,NULL,0);
memcpy(data,&s1,sizeof struct s);
我为结构的第一个实例做了。
二审怎么办?这在共享内存中可能吗?
平台:UNIX
shmat
调用只得到一个指向共享内存段的指针,该内存段之前应该用 shmget
创建。你有两种方法来处理这个问题:
分配一个段来保存所有结构的数组,然后将结构复制到该数组:
m_sharedMemoryId = shmget(key, sizeof(struct s) * nb, perm_flag);
struct s* data = shmat(m_sharedMemoryId,NULL,0);
然后你在数组中你想要的地方复制一个 struct s,这里是位置 i :
memcpy(data + i,&s1,sizeof(struct s));
这个主要是在你有很多小结构的情况下使用
为每个结构分配不同的段
m_sharedMemoryId = shmget(key, sizeof(struct s), perm_flag);
struct s* data = shmat(m_sharedMemoryId,NULL,0);
memcpy(data,&s1,sizeof(struct s));
然后您为每个结构重复分配。如果您希望能够单独解除分配的大结构很少,则可以使用此方法
我有一个结构定义如下
struct s
{
int a;
};
struct s s1;
struct s s2;
我需要将两个结构实例推送到共享内存。
char *data=(char *)shmat(m_sharedMemoryId,NULL,0);
memcpy(data,&s1,sizeof struct s);
我为结构的第一个实例做了。
二审怎么办?这在共享内存中可能吗?
平台:UNIX
shmat
调用只得到一个指向共享内存段的指针,该内存段之前应该用 shmget
创建。你有两种方法来处理这个问题:
分配一个段来保存所有结构的数组,然后将结构复制到该数组:
m_sharedMemoryId = shmget(key, sizeof(struct s) * nb, perm_flag); struct s* data = shmat(m_sharedMemoryId,NULL,0);
然后你在数组中你想要的地方复制一个 struct s,这里是位置 i :
memcpy(data + i,&s1,sizeof(struct s));
这个主要是在你有很多小结构的情况下使用
为每个结构分配不同的段
m_sharedMemoryId = shmget(key, sizeof(struct s), perm_flag); struct s* data = shmat(m_sharedMemoryId,NULL,0); memcpy(data,&s1,sizeof(struct s));
然后您为每个结构重复分配。如果您希望能够单独解除分配的大结构很少,则可以使用此方法