2015-01-27 17 views
2

나는이 질문이 전에 몇 번 질문되었을 수도 있지만 여기에 모든 비슷한 질문과 모든 대답을 읽었지만 아직도 이해하지 못한다. 따라서 스크립트에 단일 변수 선언이 있습니다.int 값을 가진 변수는 PHP에서 얼마나 많은 메모리가 필요합니까?

$a = 255; 

이 변수에 필요한 메모리 용량은 얼마입니까? 난 this excellent article, 어느 정도의 메모리가 내부 PHP 구조 (예 : _zval_struct, _zval_gc_info, _zend_mm_block_info) 할당됩니다 설명해 주셨습니다. 결과는 48 바이트입니다. 하지만 내 컴퓨터에서 나는 168 바이트를 얻는다. 그들은 어디에서 왔니? 선언 전후에 memory_get_usage()을 호출하여이 번호를 얻습니다.

내가 맥 OS X를 사전에

덕분에 PHP 5.5.18 (64 비트)를 실행하고 있습니다.

+0

32 비트 PHP 또는 64 비트 PHP? 하지만 32 비트의 경우 28 바이트이고 64 비트 PHP의 경우 56 바이트입니다 –

+0

http://stackoverflow.com/questions/5972170/what-is-theoverover-of-using-php-int –

+0

PHP 메모리가 할당되지 않았습니다. 바이트 단위이지만 블록 단위이기 때문에 할당 전후의 메모리 사용량을 측정하여 정확한 수치를 얻지는 못한다. –

답변

0

그래서 Sergiu Paraschiv의 의견 덕분에 memprof을 설치하고 주제에 대한 소규모 연구를했습니다. 다음은 PHP 5.5.18 (64 비트)을 사용하여 Mac에서 얻은 것입니다.

<?php 
memprof_enable(); 

$a = 255;   // +104 (+32 for smth initial?), total: 136 
$b = 255;   // +104, total: 240 
$c = 255.5;   // +104, total: 344 
$d = 'h';   // +104, total: 448 
$e = [];   // +176, total: 624 
$f = new stdClass; // +136, total: 760 
$g = $f;   // +72, total: 832 
$h = $g;   // +72, total: 904 
$i = $a;   // +72, total: 976 
$j = &$i;   // +104, total: 1080 
$k = &$j;   // +72, total: 1152 why not 104? 
$l = &$h;   // +104, total: 1256 
$m = null;   // +104, total: 1360 
$n = true;   // +104, total: 1464 

print_r(memprof_dump_array()); 

Array (
[memory_size] => 1464 
[blocks_count] => 27 
[memory_size_inclusive] => 1464 
[blocks_count_inclusive] => 27 
[calls] => 1 
[called_functions] => Array 
    (
     [memprof_dump_array] => Array 
      (
       [memory_size] => 0 
       [blocks_count] => 0 
       [memory_size_inclusive] => 0 
       [blocks_count_inclusive] => 0 
       [calls] => 1 
       [called_functions] => Array 
        (
        ) 

      ) 

    ) 
)