Форумы портала PHP.SU » Разное » Обсуждение статей » Особенности работы с памятью

Страниц (1): [1]
 

1. Мелкий - 18 Декабря, 2011 - 12:07:43 - перейти к сообщению
Думаю, будет не безынтересным: http://habrahabr[dot]ru/blogs/php/134784/
Особенности выделения, использования и освобождения памяти.
2. DeepVarvar - 18 Декабря, 2011 - 13:22:30 - перейти к сообщению
Цитата:
В документации PHP сказано, что приведение к null уничтожит переменную и ее значение, однако, по данному скрипту видно что это не так, что собственно является багом (документации).

---
valenok пишет:
Значение Null сбрасывает привязку названия переменной к ячейке в памяти и переменной больше не соответствует никакая ячейка. Переменная просто никуда не указывает и ни к чему не ведет. В этом случае переменная считается неопределенной,
isset вернет false, а вот is_null вернет true, так как название есть а привязка к ячейке отсутствует.

Отсюда: http://www.php.su/forum/topic.ph...98453#1241798453
---
Из комментариев статьи на хабре:
shagguboy пишет:
>почему подобные вещи не пишут в книжках
потому что не нужно? на мое имхо вот это все надо в 2% случаев, и то надо сильно подумать перед тем как лезть в эти дебри, а не просто поставить лимит побольше. php скрипт работает доли секунды, потом завершается. Даже в режиме FASTCGI где это ОЧЕНЬ сильно не нужно.

а так, тут просто собрание коллекции фактов, без выводов.
на мое имхо вся эта статья умещается в одну фразу «copy on write». Знание значения этой фразы заменяет всю эту статью.

НЕ рассмотрен сборщик мусора в разных версиях, а это самое интересное.

НЕ рассмотренно сколько памяти аллокированно скриптом и отдается ли она системе. а то у особо везучих получается веселая вещь — вроде mem usage показывает ноль, а скрипт отваливается по нехватке памяти.
>Таким образом PHP действительно избавляет от необходимости использовать передачу по >ссылке для оптимизации использования памяти
вот тут самое смешное то, что передача по ссылке если внутри функции переменная не меняется УХУДШАЕТ быстродействие

>В остальном же мы видим, что если массив, используемый для цикла, имеет больше чем одну >ссылку на себя, тогда для него не применяется оптимизация из примера №1
опять — а скорость померять? а количество zval'ов посмотреть?

В целом действительно познавательно. Однако общего мнения нет ни у кого. И это реально грустно. Так кто же знает реальные данные?
3. DlTA - 18 Декабря, 2011 - 14:01:07 - перейти к сообщению
больше всего удивило:
Цитата:
оптимизация использования массива в цикле. На время работы цикла, при попытке изменить исходный массив, неявно создается копия структуры массива (но не копия значений), которая и становится доступной по завершению цикла, а исходная структура уничтожается.

а в чем оптимизация?
4. caballero - 18 Декабря, 2011 - 15:55:30 - перейти к сообщению
DlTA пишет:
а в чем оптимизация?

Видимо речь должна была идти об "отложенном копировании" что массив не копируется пока не изменяется. Если вы будете только читать - PHP будет работать с массивом по ссылке.
5. DlTA - 18 Декабря, 2011 - 16:19:28 - перейти к сообщению
caballero пишет:
что массив не копируется пока не изменяется.
куда?!?
тут работа в цикле с изменением элементов массива для чего тут копирование? какой от него смысл?
или же вся проблема в самом алгоритме работы с памятью в PHP
типа для работы внутри блока не по ссылке делается именно копия?!
6. Champion - 18 Декабря, 2011 - 17:26:09 - перейти к сообщению
Вот фишка с циклом для меня новость. И че-то совсем не пойму, почему, если добавить новую ссылку на массив, то копирования в цикле уже не происходит. В чём тут оптимизация и что оптимизируется - для меня выглядит туманно
7. Stierus - 18 Декабря, 2011 - 23:04:26 - перейти к сообщению
Цитата:
на мое имхо вся эта статья умещается в одну фразу «copy on write». Знание значения этой фразы заменяет всю эту статью.
+1 Улыбка

 

Powered by ExBB FM 1.0 RC1