gpt4 book ai didi

c - C 结构体的总大小

转载 作者:行者123 更新时间:2023-11-30 20:26:28 24 4
gpt4 key购买 nike

我有一个与内存分配相关的基本问题。 C 中以下结构的总大小是多少?

typedef struct rubble
{
int betty;
char barney[4];
struct rubble* bambam;
} rubble;

typedef struct{
short* wilma[2];
short fred[2];
rubble dino;
}flinstone;

对于瓦砾 = betty( 4 字节 ) + barney ( 4 字节 ) + bambam ( ? )。指向碎石类型的 bambam 指针的大小是多少?

对于燧石 = wilma ( 4 字节 ? ) + fred ( 4 字节 ) + dino( sizeof(rubble) )

在这种情况下,我们如何计算指向 Short 类型的指针的大小?

最佳答案

所以。我将做出一些假设。

其中之一是所有指针都具有相同的大小。我还假设您使用的是 64 位平台,这意味着您的所有指针可能都是 8 个字节长。

此外,我假设 intint32_t 相同。 short 是一个int16_tcharint8_t,一个字节有 8 位。

typedef struct rubble
{
int betty; // offset = 0 size = 4
char barney[4]; // offset = 4 size = 4
struct rubble* bambam; // offset = 8 size = 8
} rubble;

所以这里的总大小可能是 16。

typedef struct{
short* wilma[2]; // offset = 0 size = 16
short fred[2]; // offset = 16 size = 4
rubble dino; // offset = 24 size = 16
} flinstone;

总大小为 40。

现在,请注意,dino 比您想象的更进一步进入 flinstone。这是因为 rubble 需要 8 字节对齐。

现在,不同平台的对齐需求也可能不同,并且类型也可能具有不同的大小。但这是一个可能的结果。

结构的末尾也可能有填充。例如:

struct x {
uint32_t a; // offset = 0 size = 4
uint8_t b; // offset = 4 size = 1
};

x 的总大小为 8,因为我们需要支持有 x 数组的情况,并保留 x[2]。 a 对齐。

关于c - C 结构体的总大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25859754/

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