2012-08-15 4 views
0

메모리에서 사용되는 상수와 변수를 비교하려고 시도했지만 이상한 현상이 발견되었습니다.상수는 정의되었지만 메모리는 변경되지 않았습니다.

테스트 코드 : 당신은 정확히 아무것도 안하고하지 않는

<?php 
var_dump(memory_get_usage()); // int(129100) 
// I don't understand: I don't do someting but why there has the changed 
var_dump(memory_get_usage()); // int(129156) 
var_dump(memory_get_usage()); // int(129156) 

define('hello', 'WORLD'); 
// why here hasn't changed 
var_dump(memory_get_usage()); // int(129156) 

$hello = 'WORLD'; 
var_dump(memory_get_usage()); // int(129304) 
?> 
+0

define을 사용하면 평가하기 전에 코드의 값을 대체한다는 점에서 C의 #define과 매우 유사하게 동작합니다. 나는 새로운 메모리 블록 대신 인터프리터에 이미 할당 된 메모리 블록에 정보를 저장한다고 가정합니다. – Matt

답변

2

처음에 php_var_dump를 참조하십시오 : PHP 메모리 누수 많이있다. 즉, 어딘가에 메모리를 할당하지만 해제하지는 않습니다. 그런 효과를 보는 것을 두려워하지 마십시오.

<?php 

$data = array(0,0,0,0); 
$data[0] = memory_get_usage(); 
$data[1] = memory_get_usage(); 

echo $data[0]; 
echo "\n"; 
echo $data[1]; 
echo "\n"; 

$data[2] = memory_get_usage(); 
echo $data[2]; 
echo "\n"; 
$data[3] = memory_get_usage(); 
echo $data[3]; 
echo "\n"; 

?> 
처럼

출력 될 것입니다 : 당신이 첫 번째 호출 후 변경 볼

626464 
626464 
626528 
626528 

에 "에코"이 예에서

봐 :하지만이 시간은 뭔가 다른 아마 , 출력 버퍼 또는 그와 비슷한 메모리를 할당해야합니다. 아마도 내부적으로 printf (buffer, "...", ...)를 사용하여 문자열을 생성하여 표준 출력으로 보냅니다. 이 문자열은 이후 호출에서 재사용되며 필요할 경우 더 긴 버퍼로 크기가 조절됩니다.

var_dump를 호출하면 간접적으로 echo 함수가 사용되며 첫 번째 호출에서 할당 된 내부 버퍼도 사용됩니다.

해결 방법 더 정확하게 측정하려면 "측정"전에 각 출력 함수를 한 번 호출하거나 결과의 최종 출력 전에 호출하지 않아야합니다.

관련 문제