英特尔长双倍的大小

玛丽安

抱歉,如果这是重复的帖子,但我找不到答案。我正在使用Intel i-7机器。sizeof(long double)16.不过,我记得听到某处英特尔coprocesor天然地使用10个字节的浮点数(80位)。那么,为什么实际大小为long double16,又如何访问这些本机浮点数呢?

戴维·赫弗南

在32位模式下运行时,此特定机器上用于浮点的硬件是x87浮点单元。它支持对4字节,8字节和10字节操作数的操作。您的16个字节long double实际上是带填充的10个字节类型。换句话说,仅使用16个字节中的10个字节,其余未使用的6个字节仅提供填充以确保对齐。

对10字节扩展数据类型的支持并不广泛。例如,以x64模式运行的同一台计算机在其SSE单元上执行浮点运算。该单元仅支持4字节和8字节类型。在这样的机器上,您可能会发现double并且long double是相同的。或者可能不是。这取决于编译器。在非英特尔架构上,您根本找不到这种类型。

所有这一切意味着,如果您假设支持10字节数据类型进行编码,那么将使代码的可移植性降低。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章