为什么64位系统上浮动不是双倍的?

Sam*_*rsa 10 c++ types

考虑到int32位系统上的4个字节和64位系统上的8个字节,为什么float不对待它们?为什么64位系统上的大小为a double=大小float?考虑到当我声明一个int(导致更高的性能)时选择了最好的原生整数类型,不应该发生同样的事情float(这也会导致性能提高)?

相关问题:在32位系统和64位系统上声明一个类型my_float(请原谅名称!)是不是一个坏主意?floatdouble

Dav*_*rtz 21

您的问题基于错误的前提.在大多数现代64位系统上,int仍然是4个字节.当如此大的整数很少需要时,为什么要消耗两倍的内存和两倍的内存带宽?在典型的现代64位系统中,64位整数的数学运算并不比32位整数的数学运算快,因此没有任何好处.

  • @Samaursa:没有要求`int`能够存储指针地址. (3认同)
  • 使用`int`作为数组索引是我在将32位代码移植到64位时发现的最大的64位可移植性问题之一.我在16/32 + GB的数据大小上进行压力测试的很多旧代码因整数溢出而中断.不是每个人都习惯使用`size_t`而不是`int`. (3认同)