当前位置:   article > 正文

2402d,d的real大小

2402d,d的real大小

原文

为什么在x86系统上,real.sizeof==16!
它的IEEE754扩展格式:64位尾数+15位指数+符号.

它应该是10字节!

我意思是,可能对齐不同,但为什么即使在数组中,也浪费这么多内存?

根据语言规范,real是"可用的最大浮点大小".即在某些系统上,它是IEEE754128四精度浮点数,而不是x8780扩展精度浮点数.

编译以下测试程序来验证它:

pragma(msg, "real is ", cast(int) real.sizeof*8, " bits");
pragma(msg, "real has a ", real.mant_dig, "-bit mantissa");
  • 1
  • 2

在注意本电脑(Linux,x86_64)上,使用dmd-c编译此程序,打印出:

`real`是`128`位
`Real`有`64`位尾数
  • 1
  • 2

填充.
x86ABI更喜欢对齐的东西,所以在x86上它是12字节,在x86_64上面是16字节.在这两个时候,你都不会获得x87为你提供80位的额外精度.

这正是我的意思.ABI可能会填充它,但sizeof仍应提供实际使用的(不计算间隙)字节数.

或是否可改变基本类型的对齐?
代码中,我想根据大小决定处理器是使用双倍扩展还是按实数四倍扩展.

但现在我知道不能依赖它.幸好,有提供了正确信息的mant_dig.

至少在实数数组中,与在布尔数组中一样(奇数长度除外),我期望没有填充.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/111242
推荐阅读
相关标签
  

闽ICP备14008679号