Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标准委员会关心的异国建筑 我知道C和C++标准只定义了语言实现的许多方面,仅仅因为如果有一个具有其他特性的体系结构,那么编写一个标准的编译器就很困难或不可能。_C++_C_Architecture - Fatal编程技术网

标准委员会关心的异国建筑 我知道C和C++标准只定义了语言实现的许多方面,仅仅因为如果有一个具有其他特性的体系结构,那么编写一个标准的编译器就很困难或不可能。

标准委员会关心的异国建筑 我知道C和C++标准只定义了语言实现的许多方面,仅仅因为如果有一个具有其他特性的体系结构,那么编写一个标准的编译器就很困难或不可能。,c++,c,architecture,C++,C,Architecture,我知道40年前任何一台计算机都有自己独特的规格。但是,我不知道今天使用的任何体系结构: CHAR\u位!=8 signed不是二者的补充(我听说Java在这方面有问题) 浮点不符合IEEE 754(编辑:我的意思是“不符合IEEE 754二进制编码”) 我问的原因是,我经常向人们解释,C++没有授权任何其他低级别的方面,比如固定大小的类型,这是很好的。这很好,因为与“其他语言”不同,它使您的代码在正确使用时具有可移植性(编辑:因为它可以移植到更多的体系结构,而不需要模拟机器的低级方面,例如符

我知道40年前任何一台计算机都有自己独特的规格。但是,我不知道今天使用的任何体系结构:

  • CHAR\u位!=8
  • signed
    不是二者的补充(我听说Java在这方面有问题)
  • 浮点不符合IEEE 754(编辑:我的意思是“不符合IEEE 754二进制编码”)
我问的原因是,我经常向人们解释,C++没有授权任何其他低级别的方面,比如固定大小的类型,这是很好的。这很好,因为与“其他语言”不同,它使您的代码在正确使用时具有可移植性(编辑:因为它可以移植到更多的体系结构,而不需要模拟机器的低级方面,例如符号+幅度体系结构上的两个补码算法)。但我感到遗憾的是,我自己无法指出任何特定的体系结构

所以问题是:什么体系结构具有上述特性


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"