2014-02-23 43 views
2

对不起,如果这是一个重复的帖子,但我无法找到答案。我正在使用英特尔i-7机器。 sizeof(long double)是16.但是,我记得听说英特尔coprocesor本地使用10个字节的浮点数(80位)。那么,为什么是long double 16的实际大小,以及如何访问这些本机浮点数?英特尔长双倍尺寸

回答

4

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

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

所有这一切意味着,如果你的代码假设支持10字节的数据类型,那么你正在让你的代码更加便携。

+0

我很好奇,如果我在我的代码中指定了一个long double,那么协处理器是否可以使用10个字节?他们如何“缩小”我的长双之一? –

+0

在由提问者描述的场景中,仅使用了16个字节中的10个。剩余的6个是未使用的填充物,以确保良好的对齐。 –

+0

最近年份的CPU使用30年前的协处理器? –