2011-11-03 16 views
11

Według php manual:PHP zmienne odniesienia i pamięci używanej

<?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. 

zakładać, że:

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

powinny zużywać więcej pamięci niż:

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

, ponieważ, jeśli rozumiał dobrze, w pierwszym przypadku "duplikujemy" wartość something i przypisujemy ją do $y i $z mając na końcu 3 zmienne i 3 treści, podczas gdy w drugim przypadku mamy 3 zmienne pointing o tej samej treści.

Więc z kodem jak:

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

spodziewam się mieć wykorzystanie pamięci niższa niż:

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

Ale użycie pamięci jest taka sama w obu przypadkach.

Czego mi brakuje?

Odpowiedz

3

PHP używa copy-on-write, więc nie będzie używać więcej pamięci dla zduplikowanych ciągów, dopóki ich nie zmodyfikujesz.

Powiązane problemy