Main Contents

Память против скорости, или почему иногда стоит использовать serialize

January 31, 2008 by Scratch

Сразу хочу заметить, что все описанное ниже было получено методом черного ящика. Я не смотрел исходник PHP, я не знаю как устроены массивы в этом языке; все описанное — только предположения, которые я выдвигаю. Впрочем, именно эти предположения помоги мне справиться с одной весьма нетривиальной ошибкой.

Для начала, я приведу небольшой тестовый код, который наглядно продемонстрирует проблему.

< ?php 
// This script runs more than 30 secs. 
set_time_limit(0); 
$test = array(); 
for ($i=0; $i&lt;40000; $i++) { 
  $test[$i] = array(); 
  for ($k=0; $k&lt;5; $k++) { 
    $test[$i][$k] = array(); 
    for ($j=0; $j&lt;5; $j++) { 
      $test[$i][$k][$j] = $i+$k+$j; 
    } 
  } 
} 
// So, array will contain 
// 40000 * 5 * 5 integers (1000000 elements)  
 
// And sleep to have time to 
// see memory usage in Task Manager 
sleep(100);  
 
?>

Как вы думаете, сколько будет занимать полученный массив $test() в памяти?

(more…)

Filed under: Deep Internals | Comments (5)