标准委员会关心的异国建筑 我知道C和C++标准只定义了语言实现的许多方面,仅仅因为如果有一个具有其他特性的体系结构,那么编写一个标准的编译器就很困难或不可能。
我知道40年前任何一台计算机都有自己独特的规格。但是,我不知道今天使用的任何体系结构:标准委员会关心的异国建筑 我知道C和C++标准只定义了语言实现的许多方面,仅仅因为如果有一个具有其他特性的体系结构,那么编写一个标准的编译器就很困难或不可能。,c++,c,architecture,C++,C,Architecture,我知道40年前任何一台计算机都有自己独特的规格。但是,我不知道今天使用的任何体系结构: CHAR\u位!=8 signed不是二者的补充(我听说Java在这方面有问题) 浮点不符合IEEE 754(编辑:我的意思是“不符合IEEE 754二进制编码”) 我问的原因是,我经常向人们解释,C++没有授权任何其他低级别的方面,比如固定大小的类型,这是很好的。这很好,因为与“其他语言”不同,它使您的代码在正确使用时具有可移植性(编辑:因为它可以移植到更多的体系结构,而不需要模拟机器的低级方面,例如符
CHAR\u位!=8
不是二者的补充(我听说Java在这方面有问题)signed
- 浮点不符合IEEE 754(编辑:我的意思是“不符合IEEE 754二进制编码”)
†
uint*\u t
s是可选的。浮点实现很少完全符合IEEE 754标准。在这方面削弱规范允许进行大量优化
例如,x87和SSE之间的子模板支持不同
源代码中分离的乘法和加法的融合等优化也会略微改变结果,但在某些架构上是很好的优化
或者在x86上,严格遵守IEEE可能需要设置某些标志,或者在浮点寄存器和普通内存之间进行额外传输,以强制它使用指定的浮点类型,而不是其内部80位浮点
有些平台根本没有硬件浮动,因此需要在软件中模拟它们。IEEE754的一些要求在软件中实现可能会很昂贵。特别是四舍五入规则可能是个问题
我的结论是,如果您并不总是希望保证严格遵守IEEE,那么您不需要使用异国情调的体系结构。由于这个原因,很少有编程语言能保证严格遵守IEEE标准。我在哪里找到了CHAR\u-BIT!=8
。包括
一些TI DSP具有字符位==16
BlueCore-5芯片(蓝牙
剑桥硅收音机芯片),具有字符位==
16
当然还有一个关于堆栈溢出的问题:
至于非二补系统,有一个有趣的阅读。总结:有些平台具有1的补码或符号和大小表示。看看这个平台 为尚未迁移所有Univac软件的用户提供向后兼容性 要点:
- 36位字
CHAR\u位==9
- 补语
- 72位非IEEE浮点
- 代码和数据的单独地址空间
- 地址
- 没有专用的堆栈指针
不知道它们是否提供C++编译器,但是它们<强> > < <强> > /p>
现在,他们的C手册最新版本的链接浮出水面: 第4.5节有一个9、18、36和72位的数据类型表
您的任何假设都不适用于大型机。首先,我不知道 对于使用IEEE 754的大型机:IBM使用base 16浮点 Unisys的两个大型机都使用base 8。Unisys的机器有点 在许多其他方面都很特别:薄熙来提到了2200建筑, 但MPS体系结构更为奇怪:48位标记的单词。 (单词是否为指针取决于单词中的位。) 并且数字表示的设计使得没有真实的 浮点运算与整数运算的区别:浮点运算 点是基数8;它不需要规范化,而且与所有 我见过的另一个浮点,它把小数放在 尾数,而不是左边,并使用有符号的大小作为 指数(除尾数外)。其结果是 整数浮点值具有(或可以具有)完全相同的位 表示为有符号的大小整数。而且没有漂浮物 点算术指令:如果两个值的指数为 都为0时,指令执行整数运算,否则执行整数运算 浮点运算。(A)标签哲学在中国的延续 这意味着,
int
可能占用48位,而
其中一个必须为0,否则该值将不会被视为整数。我相当确定VAX系统仍在使用中。它们不支持IEEE浮点运算;他们使用自己的格式。Alpha支持VAX和IEEE浮点格式 Cray向量机,如T90,也有自己的浮点格式,尽管较新的Cray系统使用IEEE。(我使用的T90在几年前就退役了;我不知道是否仍在使用中。) T90还有一些有趣的指针和整数表示。本机地址只能指向64位字。C和C++编译器具有CARYBIT=8(必要的是因为它运行UNICOS,是UNIX的味道,并且必须与其他系统互操作),但是本地地址只能指向64位字。所有字节级操作都由编译器合成,并且
void*
或char*
在字的高阶3位中存储字节偏移量。我认为一些整数类型有填充位
IBM大型机是另一个例子
另一方面,这些特殊的系统不需要
find $GCC_SOURCE_TREE -type f | xargs grep "#define CHAR_TYPE_SIZE"
find $GCC_SOURCE_TREE -type f | xargs grep "#define BITS_PER_UNIT"