Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Особенности работы с памятью
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Думаю, будет не безынтересным: http://habrahabr[dot]ru/blogs/php/134784/
Особенности выделения, использования и освобождения памяти.Отредактировано администратором: EuGen, 18 Декабря, 2011 - 17:33:11 Пожалуйста, не нужно создавать темы в устаревшем разделе "Программирование на PHP" - его, напротив, нужно упорядочивать
----- PostgreSQL DBA
DeepVarvar
Отправлено: 18 Декабря, 2011 - 13:22:30
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Цитата:
В документации PHP сказано, что приведение к null уничтожит переменную и ее значение, однако, по данному скрипту видно что это не так, что собственно является багом (документации).
---
valenok пишет:
Значение Null сбрасывает привязку названия переменной к ячейке в памяти и переменной больше не соответствует никакая ячейка. Переменная просто никуда не указывает и ни к чему не ведет. В этом случае переменная считается неопределенной,
isset вернет false, а вот is_null вернет true, так как название есть а привязка к ячейке отсутствует.
>почему подобные вещи не пишут в книжках
потому что не нужно? на мое имхо вот это все надо в 2% случаев, и то надо сильно подумать перед тем как лезть в эти дебри, а не просто поставить лимит побольше. php скрипт работает доли секунды, потом завершается. Даже в режиме FASTCGI где это ОЧЕНЬ сильно не нужно.
а так, тут просто собрание коллекции фактов, без выводов.
на мое имхо вся эта статья умещается в одну фразу «copy on write». Знание значения этой фразы заменяет всю эту статью.
НЕ рассмотрен сборщик мусора в разных версиях, а это самое интересное.
НЕ рассмотренно сколько памяти аллокированно скриптом и отдается ли она системе. а то у особо везучих получается веселая вещь — вроде mem usage показывает ноль, а скрипт отваливается по нехватке памяти.
>Таким образом PHP действительно избавляет от необходимости использовать передачу по >ссылке для оптимизации использования памяти
вот тут самое смешное то, что передача по ссылке если внутри функции переменная не меняется УХУДШАЕТ быстродействие
>В остальном же мы видим, что если массив, используемый для цикла, имеет больше чем одну >ссылку на себя, тогда для него не применяется оптимизация из примера №1
опять — а скорость померять? а количество zval'ов посмотреть?
В целом действительно познавательно. Однако общего мнения нет ни у кого. И это реально грустно. Так кто же знает реальные данные?
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
больше всего удивило:
Цитата:
оптимизация использования массива в цикле. На время работы цикла, при попытке изменить исходный массив, неявно создается копия структуры массива (но не копия значений), которая и становится доступной по завершению цикла, а исходная структура уничтожается.
а в чем оптимизация?
caballero
Отправлено: 18 Декабря, 2011 - 15:55:30
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
DlTA пишет:
а в чем оптимизация?
Видимо речь должна была идти об "отложенном копировании" что массив не копируется пока не изменяется. Если вы будете только читать - PHP будет работать с массивом по ссылке.
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
caballero пишет:
что массив не копируется пока не изменяется.
куда?!?
тут работа в цикле с изменением элементов массива для чего тут копирование? какой от него смысл?
или же вся проблема в самом алгоритме работы с памятью в PHP
типа для работы внутри блока не по ссылке делается именно копия?!
Champion
Отправлено: 18 Декабря, 2011 - 17:26:09
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Вот фишка с циклом для меня новость. И че-то совсем не пойму, почему, если добавить новую ссылку на массив, то копирования в цикле уже не происходит. В чём тут оптимизация и что оптимизируется - для меня выглядит туманно
Stierus
Отправлено: 18 Декабря, 2011 - 23:04:26
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Цитата:
на мое имхо вся эта статья умещается в одну фразу «copy on write». Знание значения этой фразы заменяет всю эту статью.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.