如果结构仅包含字节数组,则#pragma pack(1)有风险/危险吗?

时间:2018-10-24 13:57:51

标签: c casting pragma-pack

在仅包含字节数组的结构上使用#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字节或从中转换,而没有任何不兼容甚至错误)

2 个答案:

答案 0 :(得分:4)

如果结构仅包含uint8_t,则#pragma pack(1)将完全无效。它根本不会做任何事情,因为该结构已经尽可能紧密地打包了。

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

答案 1 :(得分:2)

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