2012-06-24 4 views
1

PHP 에서처럼 하나의 정수를 저장하는 데 약 213 바이트가 필요합니다. 사실입니까? 좋아, 다음 코드에서 살펴 보시기 바랍니다 :PHP 메모리 사용량

$N = 10000; 
echo memory_get_usage()."\n"; 
$v = array(); 
for($i = 0; $i < $N; $i++) { 
    $v[] = $i; 
} 
echo memory_get_usage()."\n"; 
unset($v); 
echo memory_get_usage()."\n"; 

출력은 다음과 같습니다

641784 
2773768 
642056 

그래서, 차이는 2773768입니다 - 641,784 = 2,131,984 바이트, 또는 정수 당 213 바이트. 왜 그렇게 많은가요? 4 바이트가 충분합니다.

답변

3

4 바이트는 메모리에 정수 값을 저장하고 데이터 유형 식별이 필요한 변수라는 사실을 고려하지 않고 단순히 정수 값을 저장하는 것으로 충분합니다. 해당 변수에 대한 다른 참조가 있는지를 나타내는 플래그 , 변수 이름 등은 모두 추가 메모리가 필요합니다.

PHP는 zval *에 값을 저장하므로 실제 값 이외에 zval 세부 정보를 저장하는 데 사용되는 모든 추가 바이트가 있습니다.

+0

정수 값에 대한 4 바이트가 32 비트 PHP에 적합하다는 것을 기억하십시오. 64 비트를 사용하는 경우 8 바이트입니다. –

+0

또한 zval 구조체를 포함하고 있으며, 배열에 포함 된 값을 매핑하는 것과 관련된 해시 맵에도 메모리 오버 헤드가 있습니다 –