如何正确对齐结构?

How to align a structure correctly?

我正在尝试使用指令 (#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;
}

非常感谢!!

I need it has 112 bytes in size. (14*8=112 bytes).

long只保证至少32位也就是4字节(假设8位字节);不是 8 个字节。

如果你希望每个整数都是 64 位,那么你可以使用 std::int64_t 而不是 long

#pragma pack 永远不会增加 class 的大小。它只会通过删除对齐所需的填充来减小大小。

P.S。 #pragma pack 在标准 C++ 中不存在(事实上,C++ 中不存在标准编译指示)。它是一个语言扩展。