возвращать большие данные по ссылке или в виде функции?

Сегодня на работе я поспорил с коллажем о передаче больших данных между областями действия. Миф заключался в том, что ссылка использует меньше памяти / ЦП при передаче между двумя областями. Мы создаем доказательство концепции, кто был прав ... итак:

function by_return($dummy=null) {
    $dummy = str_repeat("1",100 * 1024 * 1024);
    return $dummy;
}

function by_reference(&$dummy) {
    $dummy = null;
    $dummy = str_repeat("1",100 * 1024 * 1024);
}
echo memory_get_usage()."/".memory_get_peak_usage()."\n";
//1 always returns: 105493696/105496656
$nagid = by_return();
echo memory_get_usage()."/".memory_get_peak_usage()."\n";
unset($nagid);
//2 always returns:  105493696/210354184 even if we comment 1st part
by_reference($dummy);
echo memory_get_usage()."/".memory_get_peak_usage()."\n";
unset($dummy);

Но кажется, что по ссылке он потребляет больше памяти в соответствии с функцией memory_get_peak_usage ()

Как видите, использование больших данных для возврата намного разумнее чем использование в качестве ссылки, но вопрос в том, почему? Приветствуются любые разъяснения :)

11
задан confiq 18 July 2013 в 11:27
поделиться