C/C++ 位域似乎在硬件驱动程序和二进制网络传输中有很多应用。然而,它们似乎没有被广泛使用并且通常不鼓励使用,因为实际的二进制布局是特定于实现的,正如 C99 标准 6.7.2.1/10 -“结构和联合说明符”的引用中所见;
实现可以分配任何大到足以容纳位域的可寻址存储单元。如果有足够的空间剩余,紧跟在结构中另一个位域之后的位域将被打包到同一单元的相邻位中。如果剩余空间不足,则将不适合的位域放入下一个单元还是与相邻单元重叠是实现定义的。单元内位域的分配顺序(高位到低位或低位到高位)是实现定义的。未指定可寻址存储单元的对齐方式。
我的问题很简单;为什么委员会决定将位字段保留为特定于实现的东西,从而使其成为编译器构造,主要用于减少内存使用,在许多情况下它可以用来提供漂亮的二进制布局,并且免费来自比特摆弄代码的开发人员?