我在OSx上使用C并使用shmget()来获取在两个不同程序之间使用的内存 具有2个int值的结构 这是否意味着如果我想要一个27的大小而不是它必须是54以及如何使用用于结构的指针或任何帮助将非常感激
答案 0 :(得分:1)
不,你需要在struct上使用sizeof。您无法保证实现如何填充结构中的值,因此您不会假设它们的大小。此外,如果由于向结构添加成员而导致大小稍后更改,则内存分配仍将正常工作。
然后使用sizeof中的值乘以您要在共享内存区域中使用的结构的实例数。
答案 1 :(得分: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));