2011-04-29 4 views
4

스크립트가 실행되는 동안 unset()이 메모리에 영향을 미치는지 테스트하여 unset() 또는 다른 알려진 메서드 인 $ var = null이 더 효율적인 지 확인합니다. unset()은 메모리에 영향을 미쳤지 만, 두 개의 다른 가상 호스트에서 테스트 한 이후에 같은 스크립트에 대해 메모리 양의 두 배나 그보다 더 많은 양을 가져 오는 이유가 궁금했습니다. 나는 대답을 간단히 추측하고있다. 그러나 그것은 순간에 나를 벗어난다. 스크립트 자체는 다음과 같습니다.간단한 PHP unset() 메모리 테스트가 PHP 5.3에서 두 배의 메모리를 사용하는 이유는 무엇입니까?

<?php 

$init=memory_get_usage(); 
$test=array(); 
for($i=0;$i<=100000;$i++){ 
    $test[$i]=rand(0,10000000); 
} 
echo 'MEMORY CHANGE: '.((memory_get_usage()-$init)/1024/1024).'MB<br/>'; 

for($i=0;$i<=100000;$i++){ 
    unset($test[$i]); 
} 
echo 'MEMORY CHANGE: '.((memory_get_usage()-$init)/1024/1024).'MB<br/>'; 

//output on PHP 3.2.5 virtualhost: 
//MEMORY CHANGE: 6.98558807373MB 
//MEMORY CHANGE: 0.500259399414MB 

//output on PHP 5.3.5 virtualhost 
//MEMORY CHANGE: 13.970664978MB 
//MEMORY CHANGE: 1.00063323975MB 

?> 

고마워요!

+0

루프 사이에서'$ init'을 초기화하지 않아야합니까? –

+1

그리고 memory_get_usage() 대신 memory_get_usage (true)를 사용한다면? –

+0

같은 일이 발생합니다. 3.2.5 : MEMORY 변경 : 7.25MB MEMORY 변경 : 1메가바이트 3.3.5 : MEMORY 변경 : 14.25MB 메모리 변경 : 1.75MB 서버에 대해 뭔가가 있어야하지만, 나도 몰라 무엇을 찾을 것이다. – kingmaple

답변

3

PHP 3.2.5? 그것은 너무 오래되어서 석기 시대에 이르지 못합니다. PHP는 Zend 엔진을 사용하여 총 재 작성을 수행 했으므로 언어 ​​자체가 비교적 동일하게 유지 되더라도 서로 다른 두 환경을 비교할 수 있습니다.

그러나 버전 번호가 오타 인 경우 32 비트 v.s입니다. 64 비트 호스트는 int의 크기를 두 배로 늘리고 사용자의 2 배 차이를 설명 할 수 있습니다.

+0

phpinfo()와의 차이점을 말할 수 있습니까? 3.3.5에서 "Linux sn19 2.6.18-194.32.1.el5 # 1 SMP Wed Jan 5 17:52:25 EST 2011 x86_64"및 3.2.5는 "Linux cloud-212-47-211- 132.netpoint.ee 2.6.35 # 1 SMP Fri Aug 6 23:39:12 EEST 2010 x86_64 " – kingmaple

+0

글쎄, 호스트는 분명히 64 비트입니다. PHP에서 확인하려면 다음 사이트에서 해결책을 찾으십시오. http://stackoverflow.com/questions/2353473/can-php-tell-if-the-server-os-it-64-bit –

+0

좋아, PHP 5.3을 다운 그레이드했습니다. .5 서버를 5.2.17로 변경해도 비교할 때 메모리 양이 두 배가되는 것으로 나타납니다. 이건 이상해. 그래서 그것은 PHP 버전과 같지 않지만, 어떤 종류의 PHP 또는 서버 설정입니다. 어떤 아이디어? – kingmaple

관련 문제