英特尔的长双倍大小

时间:2014-02-23 12:53:59

标签: c

很抱歉,如果这是重复的帖子,但我无法找到答案。我正在使用Intel i-7机器。 sizeof(long double)是16。但是,我记得在某处看到英特尔协处理器本身使用10字节浮点数(80位)。那么,为什么long double 16的实际大小以及如何访问这些原生浮点数呢?

1 个答案:

答案 0 :(得分:4)

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

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

所有这些意味着,如果您编写代码假设支持10字节数据类型,那么您的代码将变得不那么便携。