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

Это опасно / рискованно использовать #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 ответа

Решение

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

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

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

Другие вопросы по тегам