将结构存储在共享内存中是一种好习惯吗?

时间:2013-04-02 08:44:55

标签: c shared-memory

我一直在寻找,但我找不到任何有价值的东西,所以我在这里问。

将结构直接保存在C的共享内存中是一个好习惯吗?我的意思是,像这样:

typedef struct {
    ...
} foo;

int id = shmget(sizeof(foo), ...);
foo* bar = (foo*) shmat(id, ...);

或者分配一个数组并仅存储您需要的字段(例如

)更好
#define SHM_FIELD_A(shm) (*(shm))
#define SHM_FIELD_B(shm) (*(shm) + 1)

如果我想存储一个复杂的结构(带有双精度,字符,不同大小的数据),那么使用结构可能会更好。但是,如果我只想存储整数,那会更好吗?

3 个答案:

答案 0 :(得分:3)

首先,请不要在C中转换shmat()的返回值,这样做没有意义,它可以隐藏错误。

其次,你永远不会说出“好”和“更好”的意思;你在优化什么?

我肯定会建议存储结构,如果这对应用程序有意义,如果值足够相关以保证将它们存储在结构中,那么共享该结构应该同样有意义。

当然这意味着共享此访问权限的应用程序如此紧密耦合,以至于不得不共享结构声明。

答案 1 :(得分:1)

通过存储结构,您将把所有无聊的工作(字段访问,分配大小,对齐)委派给编译器。我认为将它作为一种结构没有危险。结构或数组 - 它仍然是一大块内存。当您想要通过有意义的名称访问内部时,结构布局告诉编译器要生成什么偏移。

答案 2 :(得分:0)

共享内存的主要目的是进程间通信(IPC)。如果不是目标,我找不到保存共享内存的任何理由