c - 将目标文件与在具有不同对齐限制的体系结构上编译的结构访问链接

标签 c struct compilation linker

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

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

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

  1. 可能违反对齐限制
  2. 一个目标文件结构访问的偏移量与其他文件不同

最佳答案

有几种可能性:

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

关于c - 将目标文件与在具有不同对齐限制的体系结构上编译的结构访问链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539484/

相关文章:

c - 如何将结构类型转换为分配的 char 内存空间

在 C 中使用 if/else 语句的命令行参数

c++ - 我的头文件是否应该能够自行编译?

c++ - g++ 4.7.1 编译错误 : conflicting types for ‘strsignal’

c - 这是使用条件变量的正确方法吗?

c - C语言中如何查找字符串

c - sizeof(struct) 不遵循填充

C++ 使用 memcpy 填充结构中的 vector

c++ - 与 libQt5Core 的链接

c - 通过函数参数从另一个文件访问静态全局数组