【发布时间】:2014-05-12 16:34:05
【问题描述】:
我有一个写入共享内存的进程和另一个从中读取的进程。两者共享相同的头文件,并且具有用于编译的相同编译器标志。在运行这两个进程时,结构在一个中是 4 字节对齐的,在另一个中是 8 字节对齐的。
这可能吗?如果是,那么任何解决方案都具有相同的对齐方式?
例如。其中一个结构是
typedef struct a {
unsigned int x;
unsigned long long y;
}b;
在进程 1 中,上述结构的 sizeof 为 12,而在进程 2 中,大小为 16。机器中 int 的大小为 4 字节,unsigned long 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
【问题讨论】:
-
您能补充更多信息吗?什么操作系统和编译器?此外,显示不同进程中不同结构的结构定义和调试器输出的来源也会有所帮助。
-
@Andrew:我添加了一个结构。我正在使用 PowerPc 执行进程并使用 powerpc 的交叉编译器在 Fedora 机器上编译代码
-
仍需要更多信息。您如何确定结构在不同流程中具有不同的对齐方式?向我们展示这些数据。
-
@Andrew :我添加了一个示例数据
-
你能显示每个进程的gdb命令
ptype b的输出吗?