1

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

将结构直接保存在 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)

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

4

3 回答 3

3

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

其次,你从来不说“好”和“更好”是什么意思;你在优化什么?

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

当然,这意味着共享此访问权限的应用程序是如此紧密耦合,以至于必须共享一个结构声明是没有问题的。

于 2013-04-02T08:47:22.417 回答
1

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

于 2013-04-02T08:53:00.167 回答
0

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

于 2013-04-02T08:49:38.317 回答