gpt4 book ai didi

这可能是对齐内存问题吗?

转载 作者:行者123 更新时间:2023-12-02 09:15:42 25 4
gpt4 key购买 nike

我有一个映射到字节数组的结构。但我发现似乎并非所有字段都正确映射。我想知道这是对齐问题还是错误。

struct _sg64_struct
{
SG64_PCSC_TLV_HEADER header; /* This is 2 bytes */
gint8 id_perso;
gint8 status;
gint8 fare_type;
gint16 fare_zone;
gint8 support_type;
gchar loginPerso[15];
};

我有这个结构要映射到这个字节:

41150002000000000E2020202020202020202020202020

但我发现 support_type 得到 0x0E 值,而不是应有的 00 。如果我们映射它

    struct _sg64_struct
{
SG64_PCSC_TLV_HEADER header; 4115
gint8 id_perso; 00
gint8 status; 02
gint8 fare_type; 00
gint16 fare_zone; 0000
gint8 support_type; 00
gchar loginPerso[15]; E2020202020202020202020202020
};

但正如我所说,support_type 为 0E。奇怪的是,如果我将 fare_zone 映射为两个字节,它就可以工作。

struct _sg64_struct
{
SG64_PCSC_TLV_HEADER header; /* This is 2 bytes */
gint8 id_perso;
gint8 status;
gint8 fare_type;
gint8 fare_zone[2];
gint8 support_type;
gchar loginPerso[15];
};

这个结构有效。但问题是为什么?我们可以信任编译器类型吗?

最佳答案

它不起作用,因为结构内部有填充。这是一个非常糟糕的做法。结构体成员的偏移量只是所有前面成员的大小之和的假设是错误的。

关于这可能是对齐内存问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47413723/

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