在仅包含字节数组的结构上使用#pragma pack(1)
是否危险/危险?例如。这个:
#pragma pack(1)
struct RpcMessage {
uint8_t proto_info[16];
uint8_t message_uuid[16];
uint8_t arg0[16];
uint8_t arg1[16];
uint8_t arg2[16];
uint8_t arg3[16];
uint8_t arg4[16];
uint8_t arg5[16];
uint8_t arg6[16];
uint8_t arg7[16];
uint8_t payload[65376];
};
(这个想法是将这种结构直接投射到2 ^ 16个原始I / O字节或从中转换,而没有任何不兼容甚至错误)
答案 0 :(得分:4)
如果结构仅包含uint8_t
,则#pragma pack(1)
将完全无效。它根本不会做任何事情,因为该结构已经尽可能紧密地打包了。
仅当您具有大于字节对齐的元素时,才会出现填充。
答案 1 :(得分:2)
鉴于每个数组的大小是对齐方式的倍数,#pragma pack
不会做任何事情,因为每个数组都会自动正确对齐。