C语言结构体内存空间如何分配问题

2025-03-11 04:34:58
推荐回答(3个)
回答1:

看来你是64位的机器了,64位的机器是以8字节来排的,比如你的char name[20]要占20个字节,那么内存会分配3个内存块(暂且这么理解),是24个字节,而double 是占了8个字节,这个时候给char name[20] 分配的24个字节还剩下4个字节,已经存不下double了,所以又开辟了一个内存块来存double,一共32个字节。 你把double改为int, 你会发现是占用了24个字节空间。不知道你能不能理解

回答2:

这有个对齐的问题

double 是8个字节,那么这个结构体对齐单位就是8
20后面有4个补齐的
所以是24+8 = 32

回答3:

你是看的对齐吧,对齐的基数是按照类型来控制字节数。
#include"stdio.h"
int main()
{
struct st
{
char a;
char c;
double b;
};
struct st1
{
char a;
double b;
char c;
};
int a = sizeof(st);
int b = sizeof(st1);
printf("%d,%d",a,b);
return 0;
}
这里的结果就是一个是16,一个是24