【问题标题】:PHP - Are class constants any different from global constants in terms of memory?PHP - 就内存而言,类常量与全局常量有什么不同吗?
【发布时间】:2016-07-07 02:53:31
【问题描述】:

这是一个关于PHP中内存使用的问题。

  • 就内存使用而言,类常量与全局声明的常量有什么不同吗?
  • 静态引用类中声明的常量是否需要更多内存?
  • 当静态引用其中的常量时,类大小(属性和方法的数量和大小)是否重要?

为清楚起见,类常量:

class Example {    
    const foo = 'bar';
}

全局常量:

define('foo', 'bar');

【问题讨论】:

    标签: php class memory-management constants


    【解决方案1】:

    我从没想过这个,但这是个好问题。

    稍微搜索了一下,发现在memory_get_usage执行之前可以使用memory_get_usage()查看你正在使用的内存。

    所以,尝试使用它,你会看到。

    这样做:

    echo memory_get_usage()."\n";
    class Example {    
        const foo = 'bar';
    }
    echo memory_get_usage()."\n";
    define('foo', 'bar');
    echo memory_get_usage();
    

    因此,您将看到内存如何变化以及这些变化是内存使用情况。

    我知道了:

    第一个回显:349840
    第二回声:349840
    第三回声:349872

    所以,区别在于常量是预先分配的,因为如果我将类注释到最后,我会得到这个内存348664

    因此,空脚本:348664,仅具有类:349840,仅具有全局常量:348976。

    空脚本:0
    班级:1176
    全局常量:312

    所以,有很大的不同。

    【讨论】:

    • 人们尝试过similar tests,但结果似乎没有定论。这可能是由于分页。
    • 是的,它是预先分配的,因此,您必须在没有类的情况下执行它以获得“零”引用,然后看到差异,正如我所说的。
    • 有趣。所以我们可以假设,一旦声明了类,引用常量(例如Example::foo)不会对内存使用产生任何影响?
    • 是的,我已经完成了那个测试,并且回显了相同数量的内存
    • 这并不能告诉你常量占用了多少内存,而是class + constant 占用了多少。此外,由于字符串是被保留的,如果你对两个测试使用相同的字符串,你会得到不正确的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多