Xeo*_*Xeo 85 c c++ history byte computer-architecture
我一直在读句子
不要依赖大小为8位的1字节
使用
CHAR_BIT而不是8作为常量来转换位和字节
等等.今天有什么现实生活系统,这是真的吗? (我不确定C和C++之间是否存在差异,或者它是否与语言无关.如果需要,请重新加入.)
Jer*_*fin 68
在较旧的机器上,小于8位的代码相当普遍,但是大多数代码已经死了多年并且已经消失了.
C和C++规定至少 8位char,至少可以追溯到C89标准.[编辑:例如,C90,§5.2.4.2.1要求CHAR_BIT> = 8且UCHAR_MAX> = 255. C89使用不同的部分编号(我相信这将是§2.2.4.2.1)但内容相同].它们将"char"和"byte"视为基本同义[编辑:例如,CHAR_BIT描述为:"不是位域(字节)的最小对象的位数".]
然而,当前的机器(主要是DSP),其中最小的类型大于8位 - 最少12,14或甚至16位是相当普遍的.Windows CE大致相同:它的最小类型(至少使用Microsoft的编译器)是16位.但是,他们不会将char16位视为 - 而是采用(不符合)方法,根本不支持完全命名的类型char.
Joh*_*ohm 23
今天,在x86处理器上的C++世界中,依赖于8位的一个字节是非常安全的.字大小不是2(8,16,32,64)的幂的处理器非常罕见.
它并非总是如此.
Control Data 6600(及其兄弟)中央处理器使用60位字,一次只能寻址一个字.从某种意义上说,CDC 6600上的"字节"是60位.
DEC-10字节指针硬件使用任意大小的字节.字节指针包括以位为单位的字节大小.我不记得字节是否可以跨越字边界; 我认为它们不能,这意味着如果字节大小不是3,4,9或18位,那么每个字会有一些浪费位.(DEC-10使用了36位字.)
R..*_*R.. 14
除非您编写的代码可能对DSP有用,否则您完全有权假设字节为8位.全世界可能都不是VAX(或英特尔),但全世界都必须进行通信,共享数据,建立通用协议等等.我们生活在基于八位字节构建的协议的互联网时代,任何字节不是八位字节的C实现都将很难使用这些协议.
值得注意的是POSIX和Windows都有(并且要求)8位字节.这涵盖了100%有趣的非嵌入式机器,而且现在也有很大一部分非DSP嵌入式系统.
作为主流平台的平均程序员,你就不会需要太担心一个字节不是8位.但是,我仍然CHAR_BIT在我的代码和assert(或更好static_assert)任何依赖8位字节的位置使用常量.这应该让你安全.
(我不知道任何相关的平台,它不成立).
首先,位数char不正式依赖于"系统"或"机器",即使这种依赖性通常是由常识暗示的.位数char仅取决于实现(即在编译器上).char对于任何"普通"系统或机器,实现编程器的位数都超过8位是没有问题的.
其次,有几个嵌入式平台sizeof(char) == sizeof(short) == sizeof(int),每个都有16位(我不记得这些平台的确切名称).此外,众所周知的Cray机器具有类似的特性,所有这些类型都具有32位.
| 归档时间: |
|
| 查看次数: |
24988 次 |
| 最近记录: |