【问题标题】:Can the Size of the Byte greater than octet 8 bits字节的大小能否大于八位字节 8 位
【发布时间】:2013-01-20 02:22:35
【问题描述】:

我正在经历http://www.parashift.com/c++-faq/index.html,在那里我发现字节也可以是64位http://www.parashift.com/c++-faq/very-large-bytes.html。有没有可能,一个字节这么多的存储容量有什么用?

【问题讨论】:

  • 理论上是可以的。实际上,根本不会找到 64 位字符。我听说在开发 Cray 的第一个 C 编译器的早期非常,他们有一个具有 64 位 char 的编译器,但是当他们发布它时,他们显然已经解决了这个问题。
  • @blacktomado - 还有一些旧系统的字长不是 8 位的倍数,语言委员会喜欢允许在此类系统上进行现有实现。见Exotic architectures the standard committed cares about

标签: c++ byte


【解决方案1】:

关键不是大字节“本身”的用处,而是事实上,对于标准,字节是系统上最小的可寻址数量1;如果系统不能以小于 64 位的单位寻址其内存,则char 将是 64 位。

显然,在现代通用计算机上几乎不可能找到这种奇怪的东西,这些奇怪的东西出现在非常专业的硬件上(我听说 DSP 特别容易出现这种东西),通常是出于性能原因。

您可以在this other FAQ 中查看更多相关信息。


  1. 只要大于 8 位并且能够保存一组基本字符(字母数字字符加上一些符号,IIRC)。

【讨论】:

  • 保证sizeof(char) == 1 是否正确,但是在该系统上增加char* 会使内存增加char 的“实际大小”?还是1,即使“字节”更大?
  • @leemes:“1”什么?它增加指向下一个可寻址内存位置的指针,因为这正是 char 的定义。此外,根据定义,sizeof(char) 为 1,因为 sizeof 使用 char 作为测量单位来测量内容。
  • 是的,我想我现在明白了。谢谢;)
  • 递增char * 总是使它指向下一个字符,并且将其前移一个。因此,如果char 是 16 位而不是 8 位,则向指针添加 1 使其指向下一个 16 位字符而不是下一个 8 位字符。这仍然是 1 的增量。
  • @leemes:并不是说它特别悲惨,这样一个系统上的所有库函数都可以使用这些“大”字符,因此读取原始对象的代码几乎没有区别(除非您明确依赖某处每个字节有 8 位)。不过,请记住,大于 8 位的字节极为罕见 - 除非您在奇怪的嵌入式平台上工作,否则您不必担心。
【解决方案2】:

您正在寻找的关键定义是 CHAR_BIT,它仅在 C99(以及相应的现代 C++ 系统)中保证 >=8。 POSIX 要求 CHAR_BIT == 8。

如前所述,并非所有系统都将其固定为 8 的真正原因是 DSP,它简化了它们的寻址机制以提高速度,只允许对架构字长进行一次对齐。大多数现代 DSP 都是 16 位或 32 位的,但我想有些也是 64 位的。

如果您确实有重要的代码,您可以使用 CHAR_BIT 从字节计算 8 位块,这应该在 CHAR_BIT==8 平台上进行优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多