¿Devuelve datos grandes por referencia o como retorno en la función?

En el trabajo de hoy tuve una discusión con un collage sobre pasar grandes datos entre ámbitos. El mito era que la referencia usa menos uso de memoria / CPU al pasar entre 2 ámbitos. Creamos una prueba de concepto que tenía razón ... entonces:

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);

Pero parece que, por referencia, consume más memoria de acuerdo con la función "memory_get_peak_usage ()"

Como puede ver, usar datos grandes para regresar es mucho más inteligente que usarlo como referencia, pero la pregunta es, ¿por qué? Cualquier iluminación es bienvenida

Respuestas a la pregunta(1)

Su respuesta a la pregunta