高效使用 union 的策略
共享内存的成员:
如果你的程序在某个时间点只需要使用一种数据类型,可以用 union 来减少内存消耗。例如,一个通信协议的数据包可能在不同的时间只存储一种类型的数据。
c
复制代码
typedef union {
uint8_t raw[32];
struct {
uint16_t header;
uint8_t payload[28];
uint16_t checksum;
} structuredData;
} Packet;
位域与 union 结合:
位域可以与 union 结合使用,以便在单个位或位段层面上优化内存使用。这在处理标志或多个状态位时特别有用。
c
复制代码
typedef union {
struct {
uint16_t flag1 : 1;
uint16_t flag2 : 1;
uint16_t flag3 : 1;
uint16_t reserved : 13;
} bits;
uint16_t allFlags;
} Flags;
不同数据视图:
使用 union 来表示同一数据的不同视图。例如,将数据包视为字节数组或特定格式的数据结构。
c
复制代码
typedef union {
struct {
uint16_t x;
uint16_t y;
} coordinates;
uint32_t point;
} PointUnion;
|