如果结构仅包含字节数组,则为 `#pragma pack(1)` risky/dangerous
Is `#pragma pack(1)` risky/dangerous if a struct contains only byte arrays
是否 dangerous/risky 对仅包含字节数组的结构使用 #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];
};
(想法是直接转换此结构 to/from 2^16 原始 I/O 字节,没有任何不兼容甚至错误)
如果结构只包含uint8_t
,那么#pragma pack(1)
将完全没有作用。它根本不会做任何事情,因为结构已经尽可能紧密地打包了。
仅当元素的对齐方式大于字节时,才会出现填充。
鉴于每个数组 的大小是对齐的倍数,#pragma pack
不会做任何事情,因为每个数组都会自动正确对齐。
是否 dangerous/risky 对仅包含字节数组的结构使用 #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];
};
(想法是直接转换此结构 to/from 2^16 原始 I/O 字节,没有任何不兼容甚至错误)
如果结构只包含uint8_t
,那么#pragma pack(1)
将完全没有作用。它根本不会做任何事情,因为结构已经尽可能紧密地打包了。
仅当元素的对齐方式大于字节时,才会出现填充。
鉴于每个数组 的大小是对齐的倍数,#pragma pack
不会做任何事情,因为每个数组都会自动正确对齐。