抱歉,如果这是重复的帖子,但我找不到答案。我正在使用Intel i-7机器。该sizeof(long double)
16.不过,我记得听到某处英特尔coprocesor天然地使用10个字节的浮点数(80位)。那么,为什么实际大小为long double
16,又如何访问这些本机浮点数呢?
在32位模式下运行时,此特定机器上用于浮点的硬件是x87浮点单元。它支持对4字节,8字节和10字节操作数的操作。您的16个字节long double
实际上是带填充的10个字节类型。换句话说,仅使用16个字节中的10个字节,其余未使用的6个字节仅提供填充以确保对齐。
对10字节扩展数据类型的支持并不广泛。例如,以x64模式运行的同一台计算机在其SSE单元上执行浮点运算。该单元仅支持4字节和8字节类型。在这样的机器上,您可能会发现double
并且long double
是相同的。或者可能不是。这取决于编译器。在非英特尔架构上,您根本找不到这种类型。
所有这一切意味着,如果您假设支持10字节数据类型进行编码,那么将使代码的可移植性降低。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句