【发布时间】:2018-11-27 13:14:31
【问题描述】:
所以我有这个问题,我想在我的共享内存中添加“一个”结构和一个 int 我想让我的“int在共享内存的第一个位置”(因为我在另一个程序中需要这个int)然后有结构 这是我的代码
int id = shmget( 0x82488, (sizeof(student)) + sizeof(int) ,IPC_CREAT | 0666 );
exit_on_error (id, "Error");
int *p = shmat(id,0,0);
exit_on_null(p,"Erro no attach");
Student *s = shmat(id,0,0);
exit_on_null (s,"Error");
现在我的问题来了,因为我有 2 个指针,我怎样才能让 int 成为第一个然后是结构,我应该只是
p[0]=100 s[1] = (new Student)
【问题讨论】:
-
你为什么不写一个
struct shared_mem { int count; Student s; }?那么你只需要一个指向这个结构的指针,你就可以访问所有的共享内存。 -
从
shmat获得的内存针对所有可能的数据类型进行了对齐。前面的内存4字节可能与您的结构不正确对齐。 -
@WernerHenze 我不使用那个解决方案,因为我只需要那个号码一次
-
@Ventura 但是你认为这个结构的缺点是什么?拥有可用号码但不使用它的成本是多少?做两个
shmat如何减少负载?
标签: c pointers shared-memory