【发布时间】:2015-01-22 14:22:56
【问题描述】:
我将 Visual Studio 2013 用于 x64 系统。 我有以下结构:
#pragma pack(1)
struct TimeStruct
{
int milliseconds : 10;
BYTE seconds : 6;
BYTE minutes : 6;
BYTE hour : 5;
BYTE day : 5;
};
#pragma pack()
还有一个数组:
TimeStruct stArray[10];
当我使用sizeof(stArray);时,我得到的结果是 80 而不是 40。
我需要知道问题是编译器没有正确打包还是 sizeof 没有考虑位域的实际大小。
谢谢
【问题讨论】:
-
也许你应该使用
union而不是struct。 -
从所有供应商对位域的观点开始,C++11 § 9.6 [class.bit]:“类对象中位域的分配是实现定义的。”从来没有说过更真实的话,因为位字段是臭名昭著所以(实现定义)。
标签: c++ visual-studio-2012 sizeof pragma bit-fields