顶5楼 ayb_ice, 高手。
位域与字节对齐取决于编译器, 以及CPU内存存取方式。实际上, 因为 CPU 内存存取方式决定了编译器的做法, 目的是为了效率。
对于很多8bit CPU, 位域跨两个字节要付出额外的代码来处理;
但是对于一些纯16bit CPU, 则不存在"位域跨两个字节"的限制,代之为“位域跨两个字(16BIT)"的限制;
对于80x86这类cpu, 则复杂很多, 因为历史上8088的缘故, 80x86支持字节存取和操作, 而intel 一直**向下兼容, 这造成对于 32bit数据总线的cpu存取跨32bit的两个字节需要两次操作,以及非跨32bit的两个字节需要特殊处理, 因此 visual c++等默认数据对齐方式为32bit, 以达到最高效率。
位域这种形式强烈地齐取决于编译器以及CPU, 这就是为什么不建议使用的原因。
|