sizeof()与#pragma pack()的使用

一、sizeof使用

sizeof(a)返回数据a对应的字节(byte)数

二、#pragma pack()的使用

1、结构体的对齐系数

结构体存在对齐系数,即结构体中的数据间并不是无缝连接的,而是有一个对其系数作为最小存储单位的。一个数据实际使用的内存大小为 N*对齐系数,N是使得这一部分内存大于等于数据真实大小的最小空间。

如:对齐系数为4byte,char形数据实际占据了4byte空间而不是1byte

2、#pragma pack()

每个特定平台上的编译器都有自己的默认“对齐系数”(32位机一般为4,64位机一般为8)。但是我们可以通过预编译命令#pragma pack(k),k=1,2,4,8,16来改变这个系数,其中k就是需要指定的“对齐系数”。

例:32位系统下有如下代码

#pragma pack(1)
 
struct fun{
	int i;
	double d;
	char c;
};

因为定义了对齐系数为1,则sizeof(fun)=4+8+1=13 byte

反之,如果不定义对齐系数,对齐系数默认为4,则sizeof(fun)=4+8+4=16byte

三、参考文献

机试题】2019大疆嵌入式笔试题A卷(附超详细解答)

在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值