Является ли `#pragma pack (1)` рискованным / опасным, если структура содержит только байтовые массивы - PullRequest
0 голосов
/ 24 октября 2018

Опасно / рискованно использовать #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 необработанных байтов ввода / вывода без каких-либо несовместимостей или даже ошибок)

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Учитывая, что каждый массив имеет размер, кратный выравниванию, #pragma pack ничего не сделает, так как каждый массив будет автоматически выровнен.

0 голосов
/ 24 октября 2018

Если структура содержит только uint8_t, то #pragma pack(1) не будет иметь никакого эффекта вообще.Он просто ничего не сделает, потому что структура уже упакована настолько плотно, насколько это возможно.

Заполнение появится, только если у вас есть элементы, размер которых больше байтового выравнивания.

...