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


static var and functions: memory allocation in php

我对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()相同的值

为什么?

您正在以错误的方式测试内存使用情况。使用memory_get_usage(false);获取脚本实际使用的内存。memory_get_usage(true);只是返回系统分配的内存,这对于小脚本来说总是一样的。