关于VC下结构体内存对齐问题

#include <stdio.h>
//pragma pack(8)
int main()
{
	struct key{  
		int a;
		char b;
		long double c;
		char d;
	}kk;

	struct key1{
		int a;
		char b;
		int c;
	}kk1;
	
	struct key2{
		char a;
		char b;
		char c;
	}kk2;

	printf("%d\n",sizeof(struct key));
	printf("%d\n",sizeof(struct key1));
	printf("%d\n",sizeof(struct key2));

	printf("%p %p %p %p\n",&kk.a, &kk.b, &kk.c, &kk.d);
	printf("%p %p %p\n",&kk1.a, &kk1.b, &kk1.c);
	printf("%p %p %p\n",&kk2.a, &kk2.b, &kk2.c);

	return 0;
}

输出结果:










1. key的长度是24个字节的存储空间,key1是12个字节,key2是3个字节;key中最大的成员long double类型变量是c,大小是8个字节,key1中最大的成员变量是int类型变量,大小是4个字节,key2最大的是char类型变量,大小是1字节。所以我们可以知道每个结构体的对齐系数是自己最大的成员变量。key是8,key1是4,key2是1.

2. 观察三个结构体成员变量的地址:

key.a的地址是28,key.b是2c,key.c是30,key.d是38:a是Int类型,占4个字节,所以b的地址是2c,c的大小是8个字节,第一个8空间已被a和b占去5个字节大小,容不下c,所以c重启一个8空间,所以其地址是在结构体首地址+8,c刚好占满一个8空间,所以d需要重启一个8空间,地址是首地址+8+8.

key1.a的地址是14,key.b是18,key.c是1c:同理,对齐系数是4.  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值