首页 > 后端开发 > C++ > 我可以跨不同平台和编译器安全地存储和检索 C 结构吗?

我可以跨不同平台和编译器安全地存储和检索 C 结构吗?

Mary-Kate Olsen
发布: 2024-12-19 04:36:13
原创
254 人浏览过

Can I Safely Store and Retrieve C   Structs Across Different Platforms and Compilers?

我可以安全地将跨平台/编译器兼容的结构体读/写到文件中吗?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板