Является ли `#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
ничего не будет делать, так как каждый массив будет автоматически выровнен.