结构体内存对齐

目录

一:代码

二:结构体内存对齐规则

三:图解


一:代码

#include<stdio.h>
struct S1 {
	char c1;
	char c2;
	int  a;
};
struct S2 {
	char c1;
	int a;
	char c2;
};
struct S3 {
	char c1;
	struct S1 s1;
	int a;
};
int main() {
	printf("%d\n", sizeof(struct S1));
	printf("%d\n", sizeof(struct S2));
	printf("%d\n", sizeof(struct S3));


	return 0;

}

结果是 8 和12和16 这是为什么呢?因为这里存在着内存对齐,就是结构体内存对齐

二:结构体内存对齐规则

●结构体的第一个成员变量永远放在结构体起始位置偏移量为零的位置

●从第二个成员变量开始,总是放在偏移量为一个对齐数整数的倍数处

对齐数:编译器默认对齐数与变量自身大小的较小值(取两者之间的较小的那个)Linux没有默认对齐数,VS的默认对齐数是8

●结构体的总大小为各个成员中对齐数最大的那个对齐数的整数倍(就是最大对齐数的整数倍)

●如果嵌套了结构体,嵌套的结构体对齐到自己最大的对齐数的整数倍处,结构体的总大小就是最大对齐数的整数倍(包含嵌套结构体的对齐数)

三:图解

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值