【问题标题】:What is a "byte", according to C11?根据 C11,什么是“字节”?
【发布时间】:2013-04-26 09:04:10
【问题描述】:

From the C11 draft standard, Section Chapter 1 Section 3:

3.6
字节:可寻址的数据存储单元,大到足以容纳基本字符的任何成员 一套执行环境

注意 1 可以唯一地表示对象的每个单独字节的地址

那么,当我得出标准仅针对字节可寻址的内存架构的结论时,我是否正确解释了这一点? 还是我以不正确的方式阅读它?

【问题讨论】:

    标签: c c11


    【解决方案1】:

    从技术上讲,您是对的,这确实表明符合 C 的实现必须具有字节可寻址的内存。但是 C 标准并不要求一个字节只有八位。一个实现可以将“字节”定义为 64 位,就标准而言,这只是桃子。该标准也不要求“字节寻址”是单个操作,因此仅支持 64 位读取的处理器上的 8 位字节仍然有效,只要编译器确保执行所需的屏蔽和移位得到正确的结果。

    【讨论】:

    • 所有三个答案都很好并且很清楚。所以我接受最高的投票。但什么是“基本字符集”?那里似乎没有定义?
    • @Vorac 有基本的源字符集和基本的执行字符集。基本执行字符集是什么意思,在5.2.1中定义。
    【解决方案2】:

    是的,我认为您以错误的方式阅读标准。我认为它说的是(释义):

    最小的可单独寻址的内存单元,它可以包含 基本字符集 (...) 的成员称为 byte

    也就是说,标准在其范围内通过术语字节定义了它的含义,从而拒绝了不符合标准的相同术语的定义。

    【讨论】:

      【解决方案3】:

      是的,简单地说:
      根据标准,一个字节是最小的可寻址内存位置。

      【讨论】:

      • 不,我认为标准允许字节大于最小的可寻址内存位置。
      • @PhilippWendler:为什么?如果不是一个字节,你认为最小的可寻址内存位置是什么?
      • 该标准为字节指定了两个要求:足够大以容纳基本字符集和内存可寻址。在“基本字符集”需要 16 位但 8 位单元是可寻址的系统上,一个字节需要是 16 位 IMO。
      • 我同意@PhilippWendler:标准明确规定字节必须足够大以容纳基本字符集的任何成员。如果该内存单元大于可单独寻址的最小内存单元,则标准表示 byte 大于可单独寻址的内存单元。想象一个基本字符集需要 12 位来表示在一台机器上实现的每个字符,每个机器具有可单独寻址的 8 位内存单元。
      • 它是从C中可寻址的最小内存单元。使用另一种语言(例如 CPU 的指令集)的任何可寻址性概念与 C 标准中的定义完全无关。当然这与编写编译器的人有关,因为他们必须发出一些操作码,所以他们可能会选择方便 CPU 的字节大小。标准不关心是否方便。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 2017-09-15
      相关资源
      最近更新 更多