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