linux 结构体对齐大小计算

1.对齐大小,可以设置,若对齐大于结构体中最大类型变量,则按照结构体中最大类型长度进行对齐;
2.类型变量小于对齐大小,则需要进行补齐

#include <stdio.h>

typedef struct{
	int a;
	double b;
	short c;
}Teacher_def;
// 按照8字节进行对齐
/*
	a a a a * * * *
	b b b b b b b b
	c c * * * * * *
	sizeof(Teacher_def):24
*/

typedef struct{
	double b;
	int a;
	short c;
}Teacher_def1;

// 按照8字节进行对齐
/*
	b b b b b b b b
	a a a a c c  * *
	sizeof(Teacher_def1):16
*/
typedef struct{
	char  a[3];
	int b;
	Teacher_def t;
	double c;
	short d;
}Teacher_def2;
// 按照8字节进行对齐
/*
	a a a b b b b *
	a a a a * * * *
	b b b b b b b b
	c c * * * * * *
	c c c c c c c c
	d d * * * * * *
	sizeof(Teacher_def2):48
*/
typedef struct demo{
	int a:2;//位空间
	int b:3;
	int c:4;
	double d;
}demo_def;
//按照8字节进行对齐
/*
	1bit 1bit 1bit 1bit 1bit 1bit 1bit 1bit 1bit 右补7字节1bit
	d d d d d d d d
	sizeof(demo_def):16
*/
int main()
{
	Teacher_def t;
	Teacher_def1 t1;
	Teacher_def2 t2;
	demo_def demo;
	printf("%d\n", sizeof(t));
	printf("%d\n", sizeof(t1));
	printf("%d\n", sizeof(t2));
	printf("%d\n", sizeof(demo));

	return 0;
}

运行结果:
24
16
48
16
Press any key to continue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值