我在我的代码中有一个struct iof_header
,我确定它的宽度是24个字节。我执行一个sizeof(iof_header),它返回32个字节宽。结构如何存储在内存中?
问题1 为什么它是32字节宽而不是24?
问题2 包括它的成员,结构如何存储在内存中?
问题3 我发现我创建字节我的结构之一[4-8 & 20-24]都为NULL的任何时间,我看到这种明显的在我的字符数组。该阵列的内容如下{4 bytes of BASEID_Code, 4 NULL bytes, 8 bytes of zeroed padding, 4 bytes of ASID_Code, 4 NULL bytes, 8 bytes of size}
我的unsigned __int32
成员末尾有空字节,为什么会发生这种情况?
这可能与编译有关吗?可能是使CPU能够更快地处理这些数据类型的一项有效工作?
struct iof_header
{
union
{
struct
{
unsigned __int32 BASEID_Code;
unsigned __int64 padding;
union
{
char ASID_Type[4];
unsigned __int32 ASID_Code;
};
unsigned __int64 Size;
}header;
char header_c[24];
};
iof_header()
{
header.ASID_Code = 0;
header.BASEID_Code = 0;
header.Size = 0;
header.padding = 0;
}
};
某物和一个char [32]的'union'怎么能有小于32字节的大小? –
去阅读这个externation-http://en.wikipedia.org/wiki/Data_structure_alignment – OldProgrammer
这已被问及已答复一百万次。你所有的三个问题。如果有的话,你应该发布_separately_。 –