2015-01-27 2 views
2

Я знаю, этот вопрос, возможно, задавали несколько раз раньше, но я прочитал все похожие вопросы здесь и все ответы и до сих пор не понимаю. Итак, у меня есть одно объявление переменной в моем скрипте:Сколько памяти требуется переменная с значением int в PHP?

$a = 255; 

Сколько памяти потребуется этой переменной? Я прочитал this excellent article, в котором объясняется, сколько памяти будет выделено для внутренних структур PHP (например, _zval_struct, _zval_gc_info, _zend_mm_block_info). Результат: 48 байт. Но на моей машине я получаю 168 байт. Откуда они? Я получаю этот номер, вызывая memory_get_usage() до и после объявления.

Я бегу PHP 5.5.18 (64-разрядная версия) на Mac OS X.

Спасибо заранее.

+0

32-разрядный PHP или 64-разрядный PHP? Но 28 байтов для 32-битных и 56 байтов для 64-битного PHP –

+0

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

+0

Обратите внимание, что память PHP не выделена в байтах, но в блоках, так что вы вряд ли получите точную цифру просто путем измерения использования памяти до и после назначения –

ответ

0

Итак, спасибо комментарию Серджиу Паращива, я установил memprof и сделал небольшое исследование по этой теме. Вот что я получил на своем Mac с PHP 5.5.18 (64-разрядный):

<?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 
        (
        ) 

      ) 

    ) 
) 
Смежные вопросы