gpt4 book ai didi

c - 位域的可用性

转载 作者:行者123 更新时间:2023-12-02 00:53:41 25 4
gpt4 key购买 nike

有很多建议说不要使用位域,而是手动进行位运算(例如 When to use bit-fields in C?),因为位域布局是实现定义的。

这实际上是个问题吗?我注意到 SysV ABI for x86-64 ,例如,定义了位域的布局方式,所以我认为即使混合由不同编译器生成的目标代码,在此平台上使用位域也不会有问题。

位域是否也在其他平台上进行了类似的标准化? (我主要对 Linux (SysV ABI)、MacOs 和 CygWin 感兴趣。)

最佳答案

[...] bitfield layouts are implementation-defined.

某些方面是实现定义的。其他未指定,例如为位域保留的可寻址存储单元的大小。

Is this practically a problem?

这取决于您要做什么。许多更广泛地适用于结构类型的相同问题在微观世界中适用于位域。其中,

  • 与通常的结构一样,包含位域的结构将被任何给定的实现一致地解释,但是
  • 与通常的结构一样,包含位域的结构可能会被不同的实现解释不同——可能只影响位域成员。
  • 与结构成员布局一样,实现在选择位域布局方面的自由度比一些程序员想象的要高。

I've noticed the SysV ABI for x86-64, for example, defines how bitfields should be laid out, so I suppose using bitfields on this platform shouldn't be problematic even if I mix object code generated by different compilers.

在混合可依赖于生成和使用相同位域布局的代码时,使用位域不会出现互操作性问题。

对于避免依赖于位域布局细节的代码,使用位域不会出现可移植性问题。

这些是相互矛盾的问题,因为互操作性需要一致的布局,但依赖布局细节会产生可移植性问题。

Are bitfields similarly standardized on other platforms too? (I'm mainly interested in Linux (SysV ABI), MacOs, and CygWin.)

一般来说,对于托管实现(包括您的所有示例),将有一个定义位域布局的平台 ABI,用于平台内的软件互操作性。 ABI 与独立实现并不特别相关,但许多(如果不是全部)此类实现确实指定了位域布局的完整细节。如果您担心是否可以链接使用针对同一平台的不同 C 实现编译的使用位域的代码并获得正确工作的程序,那么答案几乎肯定是"is"。

关于c - 位域的可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55982862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com