具有相同编译时选项的两个进程可以在同一台机器上具有不同的字节对齐吗?

时间:2014-05-12 16:34:06

标签: c powerpc

我有一个写入共享内存的进程和另一个从中读取的进程。两者共享相同的头文件,并且具有用于编译的相同编译器标志。在运行这两个进程时,结构在一个中对齐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 = 0x1020304b.y = 0x0
在流程2中:b.x = 0x1020304b.y = 0x5060708

1 个答案:

答案 0 :(得分:1)

为了对齐结构,请查看align属性(特定于GCC)。 至于你的问题,我不知道看到编译器以不同方式对齐结构的任何原因。您必须提供更多详细信息才能调查......