C/C++ 位域在硬件驱动程序和二进制网络传输中似乎有很多应用,但它们并不常用并且通常受到约束,因为实际的二进制布局是特定于实现的,正如C99标准6.7.2.1/10-"结构和联合说明符"中所示:
一个实现可以分配任何足够大以容纳位域的寻址存储单元。如果剩余空间足够,紧随结构中另一个位域后面的位域将被打包到同一单元的相邻位中。如果剩余空间不足,没有适合的位域则根据实现定义放入下一个单元或重叠相邻单元,位域在单元内的分配顺序(高到低或低到高)由实现定义。可寻址存储单元的对齐方式未指定。
我的问题很简单:为什么委员会决定让位域成为实现特定的东西,从而使其成为编译器构造,主要用于减少内存使用,而在许多情况下,它本可以用于提供良好的二进制布局,并使开发人员免于位操作代码?