PHP берет RAM при определении переменной из переменной и переносе объекта в другую переменную? - PullRequest
2 голосов
/ 28 июля 2011

В случае, если у меня есть этот код

<?php
$array = array();
for ($i=1;$i<100000;$i++){
    $array[$i] = md5(rand(0,9999999999999999));
}

$array2 = $array;

$array занимает около 0,5 МБ ОЗУ, скажем так.Процесс PHP занимает около 1,0 МБ ОЗУ с $array2 = $array;?и в этом случае

<?php
class rand{
    public $array;
    function rand(){
        $this->array = array();
        for ($i=1;$i<100000;$i++){
            $this->array[$i] = md5(rand(0,9999999999999999));
        }

    }
}

$class = new rand();
$class2 = $class;

$class занимает около 0,5 МБ ОЗУ, скажем так.Процесс PHP занимает 1,0 МБ с $class2 = $class?

это то же самое?

Тесты:

1 Ответ

1 голос
/ 28 июля 2011

Это то, о чем предупреждает руководство по PHP в справочном разделе: движок достаточно умен.Установка $array2 = $array; делает не причиной дублирования хранилища, так как PHP распознает, что они оба одинаковы.Однако, попробуйте $array[2] = 'something;' после этого.PHP обнаруживает разницу, и только затем скопирует значения.

<?php
$array = array();
for ($i=1;$i<100000;$i++){
    $array[$i] = md5(rand(0,9999999999999999));
}
echo memory_get_usage().PHP_EOL;
$array2 = $array;
echo memory_get_usage().PHP_EOL;
$array['foo'] = 'bar';
echo memory_get_usage().PHP_EOL;
//17252052
//17252156
//23776652

Классы являются ссылками по умолчанию, и только clone $object приведет к 2 объектам в PHP> = 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...