如果结构仅包含字节数组,则为 `#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 不会做任何事情,因为每个数组都会自动正确对齐。