2015-01-07 2 views
1

배열이 메모리에 얼마나 많은 바이트로 할당되어 있는지 알고 싶습니다.PHP에서 배열에 대한 메모리 할당을 반환하려면 어떻게해야합니까?

$array = range(0,1000000000); 
echo count($array);   // returns number of rows in array (1B); 
echo sizeof($array);   // alias of count(); 

이 작품을 어떻게 만들 수 있습니까?

echo memory_allocated_to_array($array); 

여기 memory_get_usage()에 기초한 추측 :

$start_bytes = memory_get_usage(); 
$array = range(0,1000000000); 
$end_bytes = memory_get_usage(); 
$array_bytes = ($end_bytes - $start_bytes); 
echo $array_bytes; 

하지만 여러 프로세스 (자체 메모리 요구 사항 각)를 실행하는 경우이 매우 부정확 생각한다.

+2

를 지금까지 내가 그 가장 정확한 방법입니다 알고 있어요로서, 같은 일을 요구하는 다른 스레드가 대답 한 현재 사용중인 방법으로 –

+2

정확하지 않습니다. mem_get_usage는 다른 PHP 인스턴스에 대해보고하지 않습니다. 함수가 호출 된 특정 프로세스/스크립트 만 호출합니다. –

+0

GC에 대해 이와 같은 검사를합니까? – Flosculus

답변

1

이것은 (내가 위의 질문에서 언급 한) 현재 가장 잘 알고있는 답변이지만, 나는 더 나은 대답을 쉽게 upvote하고 받아 들일 것이다.

$start_bytes = memory_get_usage(); 
$array = range(0,1000000000); 
$end_bytes = memory_get_usage(); 
$array_bytes = ($end_bytes - $start_bytes); 
echo $array_bytes; 
+1

가치있는 읽기 : [here] (http://nikic.github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html) (PHP7 +) and [here] (http://nikic.github.io/2014/12/22/PHPs-new-hashtable-implementation.html) – Rangad

0

편집 :

$startMemory = memory_get_usage(); 
$array = range(1, 100000); 
echo memory_get_usage() - $startMemory, ' bytes'; 

감사합니다 : 난 대답을 변경했습니다.

편집 2 :

또한이 시도 :

$startMemory = memory_get_usage(); 
$array = new SplFixedArray(100000); 
for ($i = 0; $i < 100000; ++$i) { 
    $array[$i] = $i; 
} 
echo memory_get_usage() - $startMemory, ' bytes'; 

http://php.net/SplFixedArray

+0

질문은 배열의 (메모리 내에서) 크기가 아니라 길을 묻습니다 mempory_get_usage의 반환 값을 포맷합니다. – Rangad

+0

먼저 배열을 정의한 다음 함수를 실행하십시오. @Rangad – EngineerCoder

+0

좋아, 나는 대답을 편집했다. – EngineerCoder

관련 문제