2011-11-03 2 views
11

따르면 php manual에 :PHP 변수 참조 및 메모리 사용량

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

이 때문에 그것을 이해한다면 :보다

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

더 많은 메모리를 소비해야

<?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는 가정 맞습니다. 첫 번째 경우에 값 something을 '복제'하고에 할당합니다.과 $z은 결국 3 개의 변수와 3 개의 내용을 가지며, 두 번째 경우에는 3 개의 변수 pointing이 있습니다.

그래서, 같은 코드 :

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

나는보다 메모리 사용량이 낮은있을 것으로 예상 :

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

그러나 메모리 사용은 두 경우 모두 동일합니다.

무엇이 누락 되었습니까?

답변

14

PHP는 할당시 쓰기가 아니라 쓰기시에 중복되지 않습니다. 그것의 과학적인 면담에 대해서는 Copy-on-Write in the PHP Language (Jan 18 2009; by Akihiko Tozawa, Michiaki Tatsubori, Tamiya Onodera and Yasuhiko Minamide; PDF file)을 참조하십시오. 약간의 재미를 위해서 Do not use PHP references (Jan 10, 2010; by Jan Schlüter)이 나옵니다. 더 많은 참고 자료가있는 References to the Max입니다.

+0

훨씬 더 상세한 답변 :) – Benjie

3

PHP는 copy-on-write을 사용하므로 수정하기 전까지 복제 된 문자열에 더 많은 메모리를 사용하지 않습니다.