我可以安全地将跨平台/编译器兼容的结构体读/写到文件中吗?
C 中的结构体对跨平台/编译器兼容的结构体提出了跨平台的挑战由于编译器之间填充的潜在差异,平台兼容性。这种差异是由于 C 在二进制级别缺乏标准化而产生的。
正如 Don Box 在他的书“Essential COM”中所解释的那样,C 的二进制运行时模型没有标准化。因此,不同的编译器可以对结构采用不同的填充对齐方式,即使使用具有不同 pragma pack 指令的相同编译器也是如此。
此外,结构中成员声明的顺序会影响其大小,即使成员仍然存在完全相同的。例如:
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
使用 gcc-4.3.4 编译,尽管 A 和 B 的成员相同,但其大小不同:
Size of A: 8 Size of B: 12
这种差异使得不可能假设所有编译器将以同样的方式填充结构。因此,没有保证以跨平台/编译器兼容的方式安全地读取/写入结构到文件的方法。
以上是我可以跨不同平台和编译器安全地存储和检索 C 结构吗?的详细内容。更多信息请关注PHP中文网其他相关文章!