arm编程中__packed的使用

本文介绍了在ARM编程中,__packed关键字的作用和用法。__packed用于取消结构或联合成员的默认对齐,避免填充,使得访问未对齐的数据成为可能。然而,它增加了访问开销,且存在一些使用限制,如不能与非__packed版本共存,不适用于局部整型变量和数组,并且类型转换的效果未明确定义。
摘要由CSDN通过智能技术生成

今天在看代码的时候看到以下代码:

struct dsi_ctrl_hdr {
	char dtype;	/* data type */
	char last;	/* last in chain */
	char vc;	/* virtual chan */
	char ack;	/* ask ACK from peripheral */
	char wait;	/* ms */
	short dlen;	/* 16 bits */
} __packed;
结构体的末尾用__packed进行限定。因为不懂其用法,于是通过百度整理了__packed的作用及用法。

__packed 限定符将所有有效类型的对齐边界设置为 1。这就意味着:

1、不会插入填充以对齐压缩对象

2、使用未对齐的访问读取或写入压缩类型的对象。


使用 __packed 限定符声明结构或联合后,__packed 将应用于该结构或联合的所有成员。成员之间或结构末尾均没有填充。必须使用 __packed 声明压缩结构的所有子结构。可以单独压缩非压缩结构的整型子字段。

用法
若要将结构映射到外部数据结构或访问未对齐数据,__packed 限定符非常有用;但由于访问开销相对较高,通常对节省数据大小并没有什么帮助。通过仅对需要压缩的结构中的字段进行压缩,可以减少未对齐访问的数量。


限制
以下限制适用于使用 __packed 的场合:

1、__packed 限定符不能用于以前未使用 __packed 声明的结构。


2、与其他类型限定符不同,不能同时具有同一结构类型的 __packed 版本和非 __packed 版本。


3、__packed 限定符不影响整型局部变量。<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值