【问题标题】:Can two processes with same compile time options have different byte alignments on same machine?具有相同编译时间选项的两个进程可以在同一台机器上具有不同的字节对齐方式吗?
【发布时间】: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 = 0x1020304b.y = 0x0
进程 2:b.x = 0x1020304b.y = 0x5060708

【问题讨论】:

  • 您能补充更多信息吗?什么操作系统和编译器?此外,显示不同进程中不同结构的结构定义和调试器输出的来源也会有所帮助。
  • @Andrew:我添加了一个结构。我正在使用 PowerPc 执行进程并使用 powerpc 的交叉编译器在 Fedora 机器上编译代码
  • 仍需要更多信息。您如何确定结构在不同流程中具有不同的对齐方式?向我们展示这些数据。
  • @Andrew :我添加了一个示例数据
  • 你能显示每个进程的gdb命令ptype b的输出吗?

标签: c powerpc


【解决方案1】:

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

【讨论】:

  • 我添加了更多细节
猜你喜欢
  • 2020-11-23
  • 2012-10-25
  • 1970-01-01
  • 2015-09-26
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多