能否用数组初始化结构体引用?附内存优化场景需求
问题:能否用引用将数组别名化为结构体?
场景与初始尝试
我想实现这样的代码,用引用把一个数组直接别名成结构体,但编译不通过:
struct S { int length; char data[100]; }; class C { uint8_t buffer[10]; S& s = buffer[0]; };
换成指针的写法是可以编译的,但用引用会更便捷:
class C { uint8_t buffer[10]; S* s = (S*)buffer; };
这么做的原因是:我有一个类似S的结构体用于收发各类数据包,部分数据包长度有限,直接声明为S会浪费不必要的内存。
补充实际代码场景
之前的表述可能不够清晰,以下是我实际使用的代码片段:
typedef struct BP_Error_t { uint8_t cause; uint8_t error; } BP_Error_t; typedef struct BP_Upload_Rq_t { char file[FILE_NAME_LENGTH]; uint8_t size; uint8_t chunk[MAX_FILE_CHUNK]; } BP_Upload_Rq_t; typedef struct BusPacket_t { uint8_t source; uint8_t target; uint8_t packet_id; uint8_t length; union { BP_Error_t error; BP_TPI_Poll_t tpi_poll; BP_TPI_ACK_t tpi_ack; BP_WiFi_Poll_t wifi_poll; BP_WiFi_ACK_t wifi_ack; BP_Erase_Rq_t erase_rq; BP_Erase_Rsp_t erase_rsp; BP_Upload_Rq_t upload_rq; BP_Upload_Rsp_t upload_rsp; BP_Download_Rq_t download_rq; BP_Download_Rsp_t download_rsp; BP_DFU_Rq_t dfu_rq; BP_DFU_Rsp_t dfu_rsp; }; } BusPacket_t;
如你所见,BusPacket_t结构体的大小由最长的联合成员决定,达到240字节。现在我需要将仅6字节的错误包作为类成员,若直接声明为BusPacket_t会浪费大量内存,因此想分配6字节数组并将其别名化为结构体以方便访问。
内容的提问来源于stack exchange,提问作者Maple
相关产品推荐
相关产品推荐

