Как правильно выровнять конструкцию?

Я пытаюсь выровнять структуру с помощью директивы (#pragma pack).

Мне нужен размер 112 байт. (14*8=112 байт).

Однако у него всего 80 байт.

Как это сделать правильно?

      #pragma pack (8)
struct Deal
{
   long     deal_ticket;         
   long     order_ticket;        
   long     position_ticket;     
   long     time;                
   long     type;                
   long     entry;                
   char     symbol[8];           
   double   volume;              
   double   price;               
   double   profit;              
   double   swap;                
   double   commission;          
   long     magic;               
   long     reason;              
};


int main()
{
    cout << sizeof(Deal) << endl;
}

Большое спасибо!!

1 ответ

Решение

Мне нужен размер 112 байт. (14*8=112 байт).

гарантированно будет иметь не менее 32 бита, что составляет 4 байта (при условии 8-битного байта); не 8 байт.

Если вы хотите, чтобы каждое целое число было 64-битным, вы можете использовать std::int64_t вместо того long.

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

PS #pragma packне существует в стандартном C++ (фактически, в C ++ нет стандартных прагм). Это расширение языка.

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