【问题标题】:How to align a structure correctly?如何正确对齐结构?
【发布时间】:2021-11-16 14:33:42
【问题描述】:

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

非常感谢!!

【问题讨论】:

    标签: c++ struct pragma-pack


    【解决方案1】:

    我需要它有 112 字节大小。 (14*8=112 字节)。

    long 仅保证至少为 32 位,即 4 字节(假设为 8 位字节);不是 8 个字节。

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

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

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

    【讨论】:

    • 正确。这也意味着您不需要#pragma pack
    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 2015-02-13
    • 2013-12-12
    • 2019-10-08
    • 2016-08-07
    • 2013-08-28
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多