繁体   English   中英

Bitfields,为什么具体实现?

[英]Bitfields, why implementation specific?

C / C ++位域似乎在硬件驱动程序和二进制网络传输中有很多应用。 但是它们似乎并没有被广泛使用,并且通常不鼓励,因为实际的二进制布局是特定于实现的,如C99标准6.7.2.1/10中的引用所示 - “结构和联合说明符”;

实现可以分配足够大的任何可寻址存储单元来保持位域。 如果剩余足够的空间,则紧跟在结构中的另一个位字段之后的位字段将被打包到相同单元的相邻位中。 如果剩余的空间不足,则是否将不适合的位域放入下一个单元或重叠相邻单元是实现定义的。 单元内的位域分配顺序(高阶到低阶或低阶到高阶)是实现定义的。 未指定可寻址存储单元的对齐。

我的问题很简单; 为什么委员会决定将位字段保留为特定于实现的东西,从而使其成为编译器构造,主要用于减少内存使用,在许多情况下它可用于提供良好的二进制布局,并且免费开发人员从小巧的代码?

出于同样的原因,标准没有严格规定许多其他内容:允许灵活地为大量平台和系统生成兼容的编译器,并且仍然具有EFFICIENT编译器。

特别是,必须以特定的位/字节顺序存储的位域将使其在自然字节顺序是“错误的方式”的机器上非常慢。

是的,这意味着在多个构架和平台上使位域可移植是一种正确的痛苦。 如果你真的需要那个,那么也许你应该考虑一些其他解决方案......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM