0

我在 OSx 上使用 C 并使用 shmget() 来获取要在两个不同程序之间使用的内存我有一个 2 个 int 值的结构这是否意味着如果我想要一个 27 的大小而不是它必须是 54,这将如何工作使用用于结构的指针或任何帮助将不胜感激

4

2 回答 2

1

不,您需要在结构上使用 sizeof 。您无法保证实现将如何填充结构内的值,因此您不必假设它们的大小。此外,如果稍后由于向结构添加成员而改变大小,内存分配仍将正常工作。

然后使用 sizeof 中的该值乘以您打算在共享内存区域中使用的结构的实例数。

于 2013-03-20T12:41:25.147 回答
0

假设你有一个这样的结构:

typedef struct {
    int aCount;
    int bCount;
    int cCount;
} data_t;

以下函数将为指定大小创建共享内存。

int shared_memory_create(size_t memory_size)
{
    int shm_key = shmget(IPC_PRIVATE, memory_size, IPC_CREAT | IPC_EXCL | 0666);
    if(shm_key < 0) {
        perror("Failed to Create Shared Memory Key");
        exit(0);
    }

    return shm_key;
}

如果要创建共享内存以容纳 27 个元素,请调用函数shared_memory_create,如下所示:

shm_key = shared_memory_create(27*sizeof(data_t));
于 2018-04-30T10:24:40.680 回答