PHP 对象比数组省内存?错!数组比对象省内存?错!

191 阅读1分钟
刚刚一个群里有人引出了 PHP 数组和对象占用内存谁多谁少的问题。我想起之前我好像也测试过这个问题,和群里人说的对象比数组节省内存的结论相反,我得出的是数组比对象节省内存

但今天,我想说,这两种说法都不对!!!

话不多说,直接上代码:

class AAA
{
    public $a,$b,$c,$d,$e;
     
    public function __construct($v)
    {
        $this->a = $v[0];
        $this->b = $v[1];
        $this->c = $v[2];
        $this->d = $v[3];
        $this->e = $v[4];
    }
}
 
$max = 10000;
 
$a = memory_get_usage();
$list1 = [];
for($i = 0; $i < $max; ++$i)
{
    $list1[] = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
}
echo 'PHP 数组内存占用:', memory_get_usage() - $a, PHP_EOL;
 
$a = memory_get_usage();
$list2 = [];
for($i = 0; $i < $max; ++$i)
{
    $obj = new stdClass();
    $obj->a = 1;
    $obj->b = 2;
    $obj->c = 3;
    $obj->d = 4;
    $obj->e = 5;
    $list2[] = $obj;
}
echo 'PHP stdClass内存占用:', memory_get_usage() - $a, PHP_EOL;
 
$a = memory_get_usage();
$list3 = [];
for($i = 0; $i < $max; ++$i)
{
    $list3[] = new AAA(1,2,3,4,5);
}
echo 'PHP 自定义类内存占用: ', memory_get_usage() - $a, PHP_EOL;

运行结果:(不同人跑结果不同,但是谁多谁少不会变)

PHP 数组内存占用:3117392

PHP stdClass内存占用:3418800

PHP 自定义类内存占用: 1582896

结论:PHP 数组、对象内存占用,自定义类<数组<stdClass