我一直在寻找,但我找不到任何有价值的东西,所以我在这里问。
将结构直接保存在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)
如果我想存储一个复杂的结构(带有双精度,字符,不同大小的数据),那么使用结构可能会更好。但是,如果我只想存储整数,那会更好吗?
答案 0 :(得分:3)
首先,请不要在C中转换shmat()
的返回值,这样做没有意义,它可以隐藏错误。
其次,你永远不会说出“好”和“更好”的意思;你在优化什么?
我肯定会建议存储结构,如果这对应用程序有意义,如果值足够相关以保证将它们存储在结构中,那么共享该结构应该同样有意义。
当然这意味着共享此访问权限的应用程序如此紧密耦合,以至于不得不共享结构声明。
答案 1 :(得分:1)
通过存储结构,您将把所有无聊的工作(字段访问,分配大小,对齐)委派给编译器。我认为将它作为一种结构没有危险。结构或数组 - 它仍然是一大块内存。当您想要通过有意义的名称访问内部时,结构布局告诉编译器要生成什么偏移。
答案 2 :(得分:0)
共享内存的主要目的是进程间通信(IPC)。如果不是目标,我找不到保存共享内存的任何理由