我有一个基本的内存分配相关问题。 C中以下结构的总大小是多少?
typedef struct rubble
{
int betty;
char barney[4];
struct rubble* bambam;
} rubble;
typedef struct{
short* wilma[2];
short fred[2];
rubble dino;
}flinstone;
对于rubble = betty(4个字节)+ barney(4个字节)+ bambam(?)。 bambam指向碎石类型的大小是多少?
对于flinstone = wilma(4个字节?)+ fred(4个字节)+ dino(sizeof(rubble))
在这种情况下,我们如何计算指针的大小?
答案 0 :(得分:1)
因此。我将做一些假设。
其中一个是所有指针都具有相同的大小。我还假设您使用的是64位平台,这意味着您的所有指针都可能长达8个字节。
此外,我假设int
与int32_t
相同。 short
是int16_t
。并且char
是int8_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
对齐的情况。