哪些平台除了8位字符之外还有别的东西?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

看起来8位char几乎是通用的。我原以为对于主流平台来说,有必要有一个8位char来确保它在市场上的可行性。

现在和历史上,哪些平台使用的char不是8位,为什么它们与“正常”8位不同?

在编写代码并考虑跨平台支持时(例如,对于通用库),值得给予非8位平台以什么样的考虑char

在过去,我遇到了一些char16位ADI公司的DSP 。DSP是我想的一个小众体系结构。(再次,当时手工编译的汇编器很容易打败可用的C编译器可以做的事情,所以我在该平台上并没有真正获得C经验。)

提问于
用户回答回答于

char在德州仪器C54x DSP上也是16位,例如在OMAP2中出现。还有其他的DSP有16位和32位char。我想我甚至听说过24位DSP,但我不记得是什么,所以也许我想象它。

另一个考虑因素是POSIX授权CHAR_BIT == 8。所以如果你使用POSIX,你可以假设它。如果稍后有人需要将代码移植到POSIX的接近实现中,那么恰好有您使用的功能但尺寸不同char,这是他们的不幸运气。

但总的来说,我认为解决问题几乎总是比解决问题更容易。只需键入CHAR_BIT。如果你想要一个确切的8位类型,请使用int8_t。你的代码将无法在不提供一个的实现上进行编译,而是无声地使用你没有想到的大小。至少,如果我遇到了一个我有充分理由假设的案例,那么我就会断言。

用户回答回答于

在编写代码并考虑跨平台支持时(例如,对于通用库),值得给非8位字符的平台带来什么样的考虑?

这并不是说它是按规则发挥作用的“值得考虑”的东西。例如,在C ++中,标准表示所有字节将具有“至少”8位。如果你的代码假设字节只有8位,那么你违反了标准。

这看起来可能很愚蠢 - “ 当然所有字节都有8位!”,我听到你在说。但很多非常聪明的人都依赖于不是保证的假设,然后一切都破灭了。历史充满了这样的例子。

例如,大多数90年代早期的开发人员认为,采用固定周期数的特定无操作CPU时序延迟将需要固定的时钟时间,因为大多数消费类CPU的功耗大致相当。不幸的是,电脑速度非常快。这引起了带有“Turbo”按钮的盒子的崛起 - 具有讽刺意味的是,其目的贬低了计算机的速度,因此使用时间延迟技术的游戏可以以合理的速度播放。

一位评论者询问标准中的哪个字符必须至少有8位。它在第5.2.4.2.1节。本节定义CHAR_BIT了最小可寻址实体中的位数,并且默认值为8.它还表示:

其实现定义的值应与所示值相同或更大(绝对值),具有相同的符号。

所以等于8或更高的任何数字都适合于由实现代入CHAR_BIT

扫码关注云+社区