c – 结构如何存储在内存中?
我的代码中有一个struct iof_header,我确定它将是24字节宽.我执行sizeof(iof_header)并返回32字节宽.
问题1 问题2 问题3 这可能与编译相关吗?使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; } }; 解决方法
可能是因为在每个__int64成员之前添加了填充以满足其对齐要求.
成员按顺序存储,必要时插入填充以使每个成员相对于结构的开始正确对齐. 某些编译器具有非标准扩展来“打包”成员,因此不插入填充.例如,在GCC上,您可以在结构定义之后放置__attribute __((packed)).
是.在某些处理器上,未对齐的访问速度很慢;在其他方面,它们根本不被允许,必须通过两次或多次访问来模拟. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |