Нужна массивная структура в PHP с минимальным использованием памятиPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Нужна массивная структура в PHP с минимальным использованием памяти

Сообщение Anonymous »

В моем сценарии PHP мне нужно создать массив> 600 тысяч целых чисел. К сожалению, My Webservers memory_limit < /code> установлен на 32 м, поэтому при инициализации массива скрипт прерывает сообщение < /p>


фатальная ошибка: < /strong> допустил размер памяти 33554432. /home/www/myaccount/html/mem_test.php на линии 8


Я знает факт, что PHP не хранит значения 8, а то, скорее, как Zvalues, которые япыть, а не в том, что я понятные по -прежнему, а то, что, скорее, есть значения, а то, что, скорее, в целом, а то, что, скорее, есть значения. 64-битная система). Я написал небольшой сценарий, чтобы оценить, сколько памяти использует каждая запись в массиве, и оказывается, что он довольно 128 байтов. 128 !!! Мне нужно> 73 м для хранения массива. К сожалению, веб-сервер не находится под моим управлением, поэтому я не могу увеличить memory_limit < /code>. < /P>

Мой вопрос: есть ли в PHP возможность создать массивную структуру, которая использует меньше памяти. Мне не нужно, чтобы эта структура была ассоциативной (простой индексный доступ достаточно). Он также не должен иметь динамического изменения размера - я точно знаю, насколько большим будет массив. Кроме того, все элементы будут одинакового типа. Точно так же, как старый добрый C-Array. < /P>



Редактировать: < /strong>
, так что решение Deceze работает с 32-битных целых числа. Но даже если вы находитесь в 64-битной системе, Pack (), похоже, не поддерживает 64-разрядные целые числа. Чтобы использовать 64-разрядные целые числа в моем массиве, я применил несколько битовых манипуляций. Возможно, приведенные ниже фрагменты будут полезны для кого -то: < /p>

function push_back(&$storage, $value)
{
// split the 64-bit value into two 32-bit chunks, then pass these to pack().
$storage .= pack('ll', ($value>>32), $value);
}

function get(&$storage, $idx)
{
// read two 32-bit chunks from $storage and glue them back together.
return (current(unpack('l', substr($storage, $idx * 8, 4)))

Подробнее здесь: https://stackoverflow.com/questions/213 ... mory-usage
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»