静态变量和函数:PHP中的内存分配

4

我在使用php 5.3脚本时对内存分配存有疑问。 想象一下你有这样的两个静态类(MyData和Test):

class MyData {
    private static $data = null;

    public static function getData() {
        if(self::$data == null)
            self::$data = array(1,2,3,4,5,);
        return self::$data;
    }
}

class Test {
    private static $test_data = null;

    public static function getTestData1() {
        if(self::$test_data==null) {
            self::$test_data = MyData::getData();
            self::$test_data[] = 6;
        }
        return self::$test_data;
    }

    public static function getTestData2() {
        $test = MyData::getData();
        $test[] = 6;
        return $test;
    }
}

以下是一个简单的test.php脚本:

for($i = 0; $i < 200000; $i++) {
    echo "Pre-data1 Test:\n\t" . memory_get_usage(true) . "\n";
    Test::getTestData1();
    echo "Post-data1 Test:\n\t" . memory_get_usage(true) . "\n";
}

for($i = 0; $i < 200000; $i++) {
    echo "Pre-data2 Test:\n\t" . memory_get_usage(true) . "\n";
    Test::getTestData2();
    echo "Post-data2 Test:\n\t" . memory_get_usage(true) . "\n";
}

我认为调用Test::getTestData1()将为2个静态变量分配内存,而Test::getTestData2()将在函数返回时销毁$test(静态变量的副本),因此第二次调用较少“占用内存”。
但是,如果运行test.php脚本,memory_get_usage将显示Test::getTestData1()和Test::getTestData2()的相同值。
为什么?
1个回答

0
你正在错误的方式测试内存使用情况。 使用 memory_get_usage(false); 获取脚本实际使用的内存。 memory_get_usage(true); 仅返回系统分配的内存,对于小脚本始终相同。

1
当您测试内存使用情况时,另一个有用的函数是:http://php.net/manual/en/function.memory-get-peak-usage.php - Pinoniq
谢谢Pinoniq!我现在可以展示Test::getTestData2()在内存方面是最便宜的。 - Ligio
我不会说很贵。最终,糟糕的编程将成为您的应用程序中真正的瓶颈。因此,我不会过多地关注这种优化。 - Pinoniq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接