【发布时间】:2017-08-15 03:59:22
【问题描述】:
我想检查一个浮点数在 PHP5 中占用了多少内存。我读到memory_get_usage() 不是很可靠。
我用它来尝试确定浮点数的大小,每次我创建一个新的浮点数时,内存使用量都会增加 168 个字节。我认为这似乎太大了,所以我的问题是 - 这个数字有多可靠?有没有更好的方法来近似浮点数的大小?
我的服务器操作系统是 Ubuntu 14.04。
【问题讨论】:
标签: php memory floating-point
我想检查一个浮点数在 PHP5 中占用了多少内存。我读到memory_get_usage() 不是很可靠。
我用它来尝试确定浮点数的大小,每次我创建一个新的浮点数时,内存使用量都会增加 168 个字节。我认为这似乎太大了,所以我的问题是 - 这个数字有多可靠?有没有更好的方法来近似浮点数的大小?
我的服务器操作系统是 Ubuntu 14.04。
【问题讨论】:
标签: php memory floating-point
memory_get_usage() 返回 PHP 用于存储程序变量的内存量以及这些变量的内部记录。
memory_get_usage() 返回的值与用于存储脚本处理的实际值的内存量之间没有直接联系。
因为 PHP 变量没有类型,所以每个变量都使用允许它存储任何类型值的数据结构。这意味着,即使对于 bool 值的 1 位有效负载,PHP 也会使用大量内存(可能是您测量的那 168 个字节)。
当值是数组的一部分时,数量会更大,因为数组是一种复杂类型,它混合了数组、散列和双链表的结构和功能。为了提供这些不同数据结构的功能,数组类型在它存储的对象之间保持链接,这些链接也使用内存。
PHP 7 改变了它在内部存储数据的方式,平均而言,它将使用的内存量减少到 PHP 5 使用的内存量的一半左右。
但是,如果您想知道使用多少字节来存储实际的浮点值(以了解其可能值的范围,f.e.),可以在documentation page of the float type 中找到该信息:
float的大小与平台相关,但最大约为 1.8e308 且精度约为 14 位十进制数字是常用值(64 位 IEEE 格式)。
我想“平台相关”意味着它在 32 位平台上使用 4 个字节(float 的传统大小),在 64 位和更大的平台上使用 8 个字节(传统的double)。
【讨论】: