计算机体系结构中的字符大小是多少?

What is char size in a computer architecture?

This Wikipedia article on word sizes 在不同的计算机体系结构中提供 table 的字长。它有不同的列,如'integer size'、'floating point size'等。我想,整数大小是ALU参数的大小,浮点大小是FPU参数的大小,地址解析单位是单个地址表示的bits/trits/digits个数。 字长 是处理器使用的数据的自然大小(这仍然有些混乱)。

但我想知道 table 中的 char size 列代表什么?它是理论上可能的最小物体尺寸吗?它是最小的对齐方式吗?对 char size 的数据定义的常见操作是什么?在x86、x86-64、ARM架构中char size为8位,与最小的integer size相同。但是在其他一些架构上,char size 是 5/6/7 位,这与该架构中的 integer size 非常不同。

在现代 C 中,char 保证可以独立修改,而不会干扰周围的数据。通常选择最窄 load/store 指令的宽度。所以在 Alpha 或 word-addressable CPU 上,char 必须是单词大小,否则每个 char 存储都必须编译为包含单词的原子 RMW。 (而不是像一些早期编译器实际使用的更便宜的 non-atomic RMW,在 C11 向语言引入 thread-aware 内存模型之前。)参见 (which covers modern ISAs in general) and C++ memory model and race conditions on char arrays C++11 和 C11 对 char.

的要求

但是,考虑到尺寸,历史机器中的 Wikipedia table of word and char sizes 显然 不是 。 (例如,在某些 word-addressable 机器上小于一个字,我很确定)。

它是关于软件(以及终端等字符 I/O 硬件)如何将机器的本机字符编码(例如 ASCII、EBCDIC 或更早版本的子集)的多个字符打包成机器字。

Unicode 和 variable-length 字符编码,如 UTF-8 和 UTF-16,与那段历史相比是最近的发明。 https://en.wikipedia.org/wiki/Character_encoding#History 许多系统使用每个字符少于 8 位,例如6(64个唯一编码)足以容纳大小写拉丁字母加上一些特殊字符和控制代码。

这些历史字符集促使一些编程语言选择使用或不使用某些特殊字符,因为它们是在具有特定字符集的系统上开发的。

历史上的机器确实做过这样的事情,比如将 3 个字符的文本打包成一个 18 位的字。

您可能想在 https://retrocomputing.stackexchange.com/ 上搜索,甚至在阅读更多内容后在那里提问。