Память против скорости, или почему иногда стоит использовать 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<40000; $i++) { $test[$i] = array(); for ($k=0; $k<5; $k++) { $test[$i][$k] = array(); for ($j=0; $j<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()
в памяти?
Filed under: Deep Internals | Comments (5)