0

#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 字节转换,而不会出现任何不兼容甚至错误)

4

2 回答 2

4

如果结构仅包含uint8_t,则#pragma pack(1)根本没有效果。它根本不会做任何事情,因为结构已经尽可能紧密地包装。

仅当您有大于字节对齐的元素时才会出现填充。

于 2018-10-24T14:01:27.030 回答
2

鉴于每个数组的大小是对齐的倍数,#pragma pack因此不会做任何事情,因为每个数组都会自动正确对齐。

于 2018-10-24T14:03:28.630 回答