Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > php - освобождение памяти


Автор: kZaido 28.4.2006, 22:52
Мой скрипт работает с текстом(строками), много работает, и получается , что он накапливает и накапливает используемую память.
Как средствами php или чего либо другого освобождать ненужную память не во вред скрипту? Везде понаставил unset() ,  неужели нету других вариантов??

очень очень жду мнений smile 

Автор: Mal Hack 28.4.2006, 23:34
В PHP нет понятия динамической памяти, посему придется решать задачу разбиением на более мелкие или оптимизацией алгоритма. 

Автор: kZaido 28.4.2006, 23:46
а как объясняется эта штука теорией?
всевремя скрипт работает с разными строками, но для каждой стабильно есть unset. Почему память не занимается другими переменными? Почему не освобождается? Может есть какая-то системная утилита которой можно освободить память(допустим под никсы)...

Просто скрипт занимает и гигабайт оперативы. если ему повезет smile конечно постепенно, но уверенно... 

Автор: Mal Hack 28.4.2006, 23:49
Цитата(kZaido @  28.4.2006,  23:46 Найти цитируемый пост)
Просто скрипт занимает и гигабайт оперативы. если ему повезет smile конечно постепенно, но уверенно...  

Нет, есть ограничение в интерпретаторе и в веб-сервере, которое настраивается.


Цитата(kZaido @  28.4.2006,  23:46 Найти цитируемый пост)
Почему память не занимается другими переменными? 

Скажем так, это отчасти небеопасно, и требует нагрузки на сервер. Плюс, в ПХП нет указателей, как пользовательских типов. 

Автор: kZaido 29.4.2006, 00:01
да, про ограничение я знаю, оно конечно же работает, я говорю в целом....
т.е. основной метасмысл послания - если переменная созданна один раз, то ее место нельзя будет занимать до конца выполнения скрипта(или как вообще?) . Т.е. чем больше переменных тем больше места и т.п. ???
А когда освободится память которую занимает скрипт??? 

Автор: Mal Hack 29.4.2006, 00:28
Цитата(kZaido @  29.4.2006,  00:01 Найти цитируемый пост)
т.е. основной метасмысл послания - если переменная созданна один раз, то ее место нельзя будет занимать до конца выполнения скрипта(или как вообще?) . Т.е. чем больше переменных тем больше места и т.п. ???

Да. Это также как и при использовании статических переменных в любом другом языке. Объем памяти можно изменять лишь используя ДП, с укзателями.

Цитата(kZaido @  29.4.2006,  00:01 Найти цитируемый пост)
А когда освободится память которую занимает скрипт???  

Если быть точным, то при завершении работы процесса веб-сервера, который контролирует скрипт. 

Автор: AztEK 29.4.2006, 09:12
Если скрипт достаточно большой, можно оптимизировать и так: http://argon.com.ru/internet/webmastering/phpoptim

Ещё видел http://codenet.ru/webmast/php/Shared-Memory.php. Правда, не разобрался я в этой штуке :/

Ещё можно перевести скрипт на ООП... 

Автор: kZaido 29.4.2006, 13:33
да он на ооп, используется несколько классов, композиция классов.
большие переменные не передаются функциям, а берутся из общих переменных класса, это сделано для экономии памяти(ну я так думаю. что это ее экономит)... 

Автор: Replicator 1.5.2006, 13:40
РНР такой язык, что тебе нет нужды думать об указателях и использовании памяти. Если ты используешь unset, то ты освободил память и тебя не должно волновать, кто, что и как будет ее использовать потом. Система сама разберется и не нужно ей помогать. В этом смысл языков высокого уровня. 

Автор: Wowa 1.5.2006, 14:12
kZaido, а если ты не будешь создавать новые переменные, а будешь заменять значение текущих? 

Автор: S.A.P. 1.5.2006, 14:29
kZaido, а можно скрипт в студию? 

По идее, в PHP память под переменную должна освобождаться, как только она "уходит из виду", т.е теряются все ссылки к ней. Думаю от сюда и надо отталкиваться.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)