如何正确对齐结构?
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++ 中不存在标准编译指示)。它是一个语言扩展。
我正在尝试使用指令 (#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++ 中不存在标准编译指示)。它是一个语言扩展。