gpt4 book ai didi

c - 嵌套结构数组的大小是如何决定的?

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:40 25 4
gpt4 key购买 nike

注意:这与 Effects of __attribute__((packed)) on nested array of structures? 相似,但不完全相同

我正在定义一个包含多个嵌套结构的结构类型。其中一个成员是一组打包结构,这让我对它应该嵌套的顺序有点困惑,相对于首先拥有较大成员的规范。

如果该成员是一个结构数组,每个结构为 8 个字节,长度为 4,则该成员总共有 32 个字节,被视为打包和对齐的单一实体,使另一个结构成员成为 18字节,实际上更小?

例如

typedef struct __attribute__((__packed__)) settingsProfile {
/* For packing and alignment, is this member 32 bytes or 4 'chunks'(?) of 8 bytes?*/
struct __attribute__((__packed__)) load {
int32_t slewRate;
int32_t current;
} load[4];

/* 18 bytes, so if the above *isn't* 32 it should be below this */
struct __attribute__((__packed__)) ac {
int32_t slewRate;
int32_t voltage;
int32_t iLimit;
int32_t ovp;
bool dcMode;
};

struct __attribute__((__packed__)) xfmr { // 4 bytes
int32_t ocp;
} xfmr;
uint16_t extOtp[2]; // 4 bytes
} settingsProfile_t;

谢谢!

最佳答案

这个 struct 是一个类型而不是变量:

 ...
/* 18 bytes, so if the above *isn't* 32 it should be below this */
struct __attribute__((__packed__)) ac {
int32_t slewRate;
int32_t voltage;
int32_t iLimit;
int32_t ovp;
bool dcMode;
};
...

因此它的大小不会包含在 sizeof(settingsProfile_t) 中。

您可能会寻找:

typedef struct __attribute__((__packed__)) settingsProfile {
uint16_t extOtp[2]; // 4 bytes
struct __attribute__((__packed__)) xfmr { // 4 bytes
int32_t ocp;
} xfmr;

// total 17
struct __attribute__((__packed__)) ac {
int32_t slewRate; // 4
int32_t voltage; // 4
int32_t iLimit; // 4
int32_t ovp; // 4
bool dcMode; // 1
} foo; // << ***here***

// total 32
struct __attribute__((__packed__)) load {
int32_t slewRate; // 4
int32_t current; // 4
} load[4];

} settingsProfile_t;

在我的编译器中,总的 sizeof(settingsProfile_t)。是 57,如数字所解释的那样。

关于c - 嵌套结构数组的大小是如何决定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23828511/

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