在C中,当我们使用结构时,何时使用#pragma pack指令是不合适的?
问题的补充......
有人可以解释更多关于如何使用指针访问未对齐数据失败的问题吗?
And*_*ell 39
固件开发人员在这里. #pragma pack是非常熟悉的领域.我会解释一下.
一般来说,你不应该使用#pragma pack.是的,它会使你的结构在内存中变小,因为它消除了struct成员之间的所有填充.但它可以使访问这些成员更加昂贵,因为成员可能不再符合他们的要求.例如,在ARM体系结构中,4字节整数通常需要4字节对齐,但在压缩结构中它们可能不是.这意味着编译器需要添加额外的指令来安全地访问该struct成员,或者开发人员必须逐个字节地访问它并手动重建int.无论哪种方式,它都会产生比对齐访问更多的代码,因此您的结构最终会变小,但您的访问代码可能会变得越来越慢.
您应该#pragma pack在结构必须与精确数据布局匹配时使用.当您编写匹配数据传输或访问规范的代码时,通常会发生这种情况...例如,网络协议,存储协议,访问HW寄存器的设备驱动程序.在这些情况下,您可能需要#pragma pack强制您的结构与规范定义的数据布局相匹配.这可能会导致前一段中提到的相同性能损失,但可能是遵守规范的唯一方法.