如何将多个结构实例存储在共享内存中?

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));
    

    然后您为每个结构重复分配。如果您希望能够单独解除分配的大结构很少,则可以使用此方法