计算结构体大小、计算位域结构体大小

计算相同数据类型的结构体大小

struct test
{
	char a;//占1字节
	char b;//占1字节
	char c;//占1字节
};
//整个结构体占3字节,abc在内存中紧密排列

计算不同数据类型的结构体大小

原则:按结构体中最大的数据结构空间大小对齐

struct test
{
	int a;//占4字节
	char b;//原本占1字节,按结构体中最大的数据类型int对齐,空出3字节,共占4字节
	int c;//占4字节
};
//整个结构体占4+4+4=12字节

计算相同数据类型的位域结构体大小

struct test
{
    unsigned int b1 : 5; //位域,int占4个字节32位,5代表b1占用前5位
    unsigned int b2 : 5;
    unsigned int b3 : 5;
    unsigned int b4 : 5;
    unsigned int b5 : 5;
} ;
//原本总大小是5*5=25位,一个int32位(4字节),也就是用了32位中的25位,计算机最小还是会开辟4字节的空间去存储25位的数据,这25位紧密排列
//因此test的大小是4字节

计算不同数据类型的位域结构体大小

原则1:按结构体中最大的数据类型的空间对齐
原则2:新的数据类型要开辟新的空间存储数据

struct test
{
	int a : 4;
	int b : 12;
	short c : 6;
	short d : 10;
};
//按结构体内最大数据类型对齐,这里最大的是int(32位4字节),因此第一个32位的空间存放4+12=16位,
//因为short是不同的数据类型,因此要开辟新的空间,因为又要和int对齐,因此第二个32位空间存放6+10=16位
//所以总的结构体大小是2个32位的空间等于8字节

参考文章和视频

参考博客
参考B站视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值