赞
踩
为什么在x86
系统上,real.sizeof==16
!
它的IEEE754
扩展格式:64
位尾数+15
位指数+符号
.
它应该是10
字节!
我意思是,可能对齐
不同,但为什么
即使在数组
中,也浪费这么多内存
?
根据语言规范,real
是"可用的最大浮点大小".即在某些系统
上,它是IEEE754
的128
位四精度
浮点数,而不是x87
的80
位扩展精度浮点数
.
可编译
以下测试程序
来验证它:
pragma(msg, "real is ", cast(int) real.sizeof*8, " bits");
pragma(msg, "real has a ", real.mant_dig, "-bit mantissa");
在注意本电脑(Linux,x86_64)
上,使用dmd-c
编译此程序,打印出:
`real`是`128`位
`Real`有`64`位尾数
填充.
x86
的ABI
更喜欢对齐
的东西,所以在x86
上它是12
字节,在x86_64
上面是16
字节.在这两个时候,你都不会获得x87
为你提供
的80
位的额外精度
.
这正是我的意思.ABI
可能会填充它,但sizeof
仍应提供实际使用
的(不计算间隙
)字节数
.
或是否可改变
基本类型的对齐
?
代码
中,我想根据大小
决定处理器是使用双倍
扩展还是按实数四倍
扩展.
但现在我知道不能依赖它.幸好,有提供了正确
信息的mant_dig
.
至少在实数数组
中,与在布尔数组
中一样(奇数长度
除外),我期望没有填充
.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。