C 将对象文件链接到在具有不同对齐限制的体系结构上编译的结构访问

C 将对象文件链接到在具有不同对齐限制的体系结构上编译的结构访问,c,struct,compilation,linker,C,Struct,Compilation,Linker,有人问我以下问题,我被难住了: 当您尝试将对象文件与struct访问链接时会发生什么情况?在struct访问中,代码是针对相同的体系结构和指令集编译的,但具有不同的对齐限制?结构定义是相同的 我觉得代码无法链接有几个原因: 可能的对齐限制冲突 一个对象文件struct access的偏移量与其他对象文件的偏移量不同 有几种可能性: 无害的: 不同的对齐限制是良性的。在这种情况下,它们会导致相同的最终布局。一切都是好的,结果都是好的,这取决于你的类型,这不太可能 编译器保存这些信息,并且在链接时检

有人问我以下问题,我被难住了:

当您尝试将对象文件与struct访问链接时会发生什么情况?在struct访问中,代码是针对相同的体系结构和指令集编译的,但具有不同的对齐限制?结构定义是相同的

我觉得代码无法链接有几个原因:

  • 可能的对齐限制冲突
  • 一个对象文件struct access的偏移量与其他对象文件的偏移量不同

  • 有几种可能性:

  • 无害的:
    不同的对齐限制是良性的。在这种情况下,它们会导致相同的最终布局。一切都是好的,结果都是好的,这取决于你的类型,这不太可能
  • 编译器保存这些信息,并且在链接时检测到不匹配。
    不太可能,不确定是否有编译器这样做
  • 最有可能的一个。
    代码将在没有警告或错误的情况下链接,但由于程序的不同部分对类型的布局有不同的想法,因此会或多或少地表现出异常行为

  • 我认为,如果将结构保存到文件中或从文件中保存,将出现深刻而可爱的错误,不一定是在编译时。(尽管各个结构可以强制对齐,尽管编译器项目设置是相同的(但并不容易)。)如果结构没有保存到文件中或从文件中保存,并且它们的sizeof没有以任何方式跨库使用,那么DLL在某些情况下可以毫无问题地组合在一起。但对于文件来说,这是一个很大的问题,会导致不良行为