2011-11-03 9 views
11

Según php manual:PHP uso de referencia de variables y la memoria

<?php 
$a =& $b; 
?> 
// Note: 
// $a and $b are completely equal here. $a is not pointing to $b or vice versa. 
// $a and $b are pointing to the same place. 

I asume que:

<?php 
$x = "something"; 
$y = $x; 
$z = $x; 

debe consumir más memoria que:

<?php 
$x = "something"; 
$y =& $x; 
$z =& $x; 

porque, si lo entendí bien, en el primer caso 'duplicamos' el valor something y lo asignamos a $y y $z teniendo al final 3 variables y 3 contenidos, mientras que en el segundo caso tenemos 3 variables pointing con el mismo contenido.

lo tanto, con un código como:

$value = "put something here, like a long lorem ipsum"; 
for($i = 0; $i < 100000; $i++) 
{ 
    ${"a$i"} =& $value; 
} 
echo memory_get_usage(true); 

que esperar a tener un uso de memoria más baja que:

$value = "put something here, like a long lorem ipsum"; 
for($i = 0; $i < 100000; $i++) 
{ 
    ${"a$i"} = $value; 
} 
echo memory_get_usage(true); 

Sin embargo, el uso de la memoria es el mismo en ambos casos.

¿Qué me estoy perdiendo?

Respuesta

3

PHP usa copy-on-write por lo que no usará más memoria para las cadenas duplicadas hasta que las modifique.

Cuestiones relacionadas