4
我对php 5.3脚本的内存分配有疑问。 想象一下,你有2个静态类(迈德特和测试)这样的:静态变量和函数:内存分配在php
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";
}
我可能认为调用测试:: getTestData1()将为2个静态变量分配内存,而Test :: getTestData2()将在函数返回时销毁$ test(静态变量的副本),所以第二次调用的内存更少。
但是,如果我运行test.php的脚本,memory_get_usage会显示测试:: getTestData1()和测试:: getTestData2()相同的值
为什么?
当你在测试内存使用情况另一个有用的功能:http://php.net/manual/en/function.memory-get-peak-usage.php – Pinoniq
感谢Pinoniq!我现在可以证明Test :: getTestData2()在内存方面是最便宜的 – Ligio
我不会说昂贵的。最终糟糕的编程将成为应用程序中的瓶颈。所以我不会把重点放在这种优化上 – Pinoniq