我有一个写入共享内存的进程和另一个从中读取的进程。两者共享相同的头文件,并且具有用于编译的相同编译器标志。在运行这两个进程时,结构在一个中对齐4个字节,在另一个中对齐8个字节。
这可能吗?如果是,那么任何解决方案在两者中都具有相同的对齐方式吗?
例如。其中一个结构是
typedef struct a {
unsigned int x;
unsigned long long y;
}b;
在过程1中,上述结构的大小为12,而在过程2中,大小为16. int的大小为4个字节,无符号长long为8个字节。
在gdb中,从上述结构的实例开始存储在共享内存中的数据如下所示:
0x01 0x02 0x03 0x04 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x05 0x06 0x07 0x08
在流程1中:b.x = 0x1020304
和b.y = 0x0
在流程2中:b.x = 0x1020304
和b.y = 0x5060708