在PHP中获取Float的大小

时间:2017-03-22 20:14:52

标签: php memory floating-point

我想检查浮点数在PHP5中占用多少内存。我读过memory_get_usage()不太可靠。

我用它来尝试确定浮点数的大小,每次创建一个新的浮点数时,内存使用量会增加168个字节。我认为这看起来太大了,所以我的问题是 - 这个数字有多可靠?有没有更好的方法来估计浮点数的大小?

我的服务器的操作系统是Ubuntu 14.04。

1 个答案:

答案 0 :(得分:3)

memory_get_usage()返回PHP用于存储程序变量及其内部bookeeping这些变量的内存量。

memory_get_usage()返回的值与用于存储脚本处理的实际值的内存量之间没有直接关联。

因为PHP变量没有类型,所以每个变量都使用一种数据结构,允许它存储任何类型的值。这意味着,即使对于bool值的1位有效负载,PHP也会占用大量内存(可能是您测量的168个字节)。

当值是数组的一部分时,数量甚至更大,因为数组是一种复杂类型,它混合了数组,散列和双链表的结构和功能。为了提供这些不同数据结构的功能,数组类型保持它存储的对象之间的链接,这些链接也使用内存。

PHP 7改变了内部存储数据的方式,平均而言,它将使用的内存量减少到PHP 5使用的内存的一半左右。

但是,如果您想知道用于存储实际浮点值的字节数(为了知道其可能值的范围,fe),可以在documentation page of the float type中找到该信息:

  

float的大小取决于平台,但最大值为〜1.8e308,精度约为14位十进制数是一个常见值(64位IEEE格式)。

我认为“平台相关”意味着它在32位平台(float的传统大小)上使用4个字节,在64位和更大平台上使用8个字节(传统{{1 }})。