Я хотел бы знать, сколько байтов массив выделяется в памяти.
$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;
Но я подозреваю, что это очень неточно, когда запущено несколько процессов (каждый со своими требованиями к памяти).
На данный момент это лучший ответ, о котором я знаю (как упомянуто в вопросе выше), но я с готовностью поддержу и приму лучшие ответы.
$start_bytes = memory_get_usage();
$array = range(0,1000000000);
$end_bytes = memory_get_usage();
$array_bytes = ($end_bytes - $start_bytes);
echo $array_bytes;
Изменить: я изменил ответ:
$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';