#pragmatic pack() 用来设置字节对齐。
例如
#pragma pack(1)
typedef struct STU1
{
uint8_t param1
uint8_t buf1[7];
uint8_t param2;
uint16_t param3;
uint16_t param4;
uint16_t param5;
uint32_t param6;
uint8_t param7;
} STU1_T;
#pragma pack()
上面使用中,#pragma pack(1)和#pragma pack()中间的结构体就会按照1字节对齐,节省内存空间。
但是这种用法,如果代码变长,#pragma pack(1)和#pragma pack()包围的内容多了以后,容易造成后面#pragma pack()漏掉的情况,导致字节对齐影响范围不可控。
在资源不紧张的情况下,尽量不控制字节对齐。
如果一定要用 建议每个结构体单独控制,例如下面的
typedef struct STU1
{
uint8_t param1
uint8_t buf1[7];
uint8_t param2;
uint16_t param3;
uint16_t param4;
uint16_t param5;
uint32_t param6;
uint8_t param7;
} __attribute__((packed)) STU1_T;
本文探讨了pragmapack()在结构体定义中的使用,如何通过#pragmapack(1)实现1字节对齐,但可能带来的代码复杂性和潜在问题。建议对每个结构体独立控制字节对齐,以避免对齐范围控制的不确定性。
1291

被折叠的 条评论
为什么被折叠?



