【问题标题】:Getting Size of Float in PHP在 PHP 中获取浮点数的大小
【发布时间】:2017-08-15 03:59:22
【问题描述】:

我想检查一个浮点数在 PHP5 中占用了多少内存。我读到memory_get_usage() 不是很可靠。

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

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

【问题讨论】:

    标签: php memory floating-point


    【解决方案1】:

    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)。

    【讨论】:

    • 非常感谢!很遗憾,我正在使用仅 PHP5 的库。我使用 PHP7 尝试了我的过程,它要快得多。不幸的是,我必须适应 PHP5。再次感谢! :)
    • 平台相关并不意味着 32 位架构上的 32 位和 64 位架构上的 64 位。浮点值的处理方式通常与整数不同,包括不同的寄存器和不同的指令,并且不像整数那样与架构宽度密切相关。更可能根据处理器的速度和浮点运算的带宽或对精度的期望/需求来做出决定。
    猜你喜欢
    • 2015-05-30
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    相关资源
    最近更新 更多