相关疑难解决方法(0)

为什么以及如何使C++位域不可移植?

关于位域声称位域是不可移植的各种问题我都遇到过很多评论,但是我从来没有能够找到解释其原因的来源.

从表面上看,我会假设所有的位域只是编译成相同的位移代码的变化,但显然必须有更多的,或者不会有这样的激烈不喜欢它们.

所以我的问题是什么使bitfields不可移植?

c++ portability bit-fields

12
推荐指数
2
解决办法
974
查看次数

Bitfields,为什么具体实现?

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

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

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

c c++ standards bit-fields

11
推荐指数
1
解决办法
914
查看次数

标签 统计

bit-fields ×2

c++ ×2

c ×1

portability ×1

standards ×1