gpt4 book ai didi

c++ - 序列化二进制结构 gcc vs cl

转载 作者:行者123 更新时间:2023-11-28 08:27:16 26 4
gpt4 key购买 nike

完全披露 - 这是家庭作业,虽然已经完成并且可以正常工作,但我正在寻找更好的解决方案。

我有一个二进制文件,它是由在 Visual Studio 中编译的程序创建的(我相信)。结构看起来像这样。

struct Record {    char c;    double d;    time_t t;};

此结构在带有 Visual Studio 2008 的 Windows 上的大小为 24 个字节。 1 + 8 + 8 = 24。所以有一些填充正在进行。 Linux 和 gcc 上的相同结构提供 16 个字节。 1 + 8 + 4 = 16。为了排列起来,我添加了一些填充并将 time_t 更改为另一种类型。那么我的结构看起来像这样。

struct Record {    char c;    char __padding[7];    double d;    long long t;};

这现在可以工作了,gcc 给出它的大小为 24 字节,但它看起来有点脏。所以两个问题..

为什么这两个编译器的实现方式不同?

是否有任何 __attribute__ ((aligned)) 类型的选项或任何其他更清洁的解决方案?

最佳答案

区别在于我们是默认 32 位对齐 double 还是默认 64 位对齐 double 。在 32 位机器上,在 64 位边界上加倍可能有一些好处,但可能并不大。 VC 在这方面可能比 gcc 更谨慎。

最重要的是,如果您使用结构进行序列化,您应该始终将它们打包(即 8 位对齐),然后手动进行对齐。这样,您的代码肯定会跨平台兼容。

关于c++ - 序列化二进制结构 gcc vs cl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3557523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com