![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 2 Dołączył: 30.11.2009 Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli wewnatrz metody to w momencie zakończenia wykonywania jej ciała. Choc to tez nie do końca prawda, w silniku PHP GC działa tak że zlicza referencje odwołujące się do danej zmiennej. Ale to już temat dla Google.
|
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Ogólnie rzecz ujmując, to znika ona gdy dobiega do końca zakres jej widoczności. Dla części zmiennych jest to koniec metody, dla innych koniec funkcji, dla jeszcze innych dopiero koniec skryptu. Wspomnienie o GC jest trafne, ale w teorii tylko, gdyż w PHP ten mechanizm wciąż nie jest tak dobry jak choćby w Javie (choć i tamten ma swoje potknięcia). No i nie zapomnijmy o tablicach superglobalnych takich jak POST, GET czy SESSION. One mają ciutkę inny czas żywota (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
No tak tak. Tylko ja odpowiadałem na pytanie sugerując sie kodem który podał pytający. Gdyby pytał o _POST/_SESSION etc. czy też ogólnie pokazał inny przykład to odpowiedział bym zapewne inaczej. Trzeba tutaj jeszcze sobie odpowiedzieć na pytanie co tak na prawdę użytkownik miał na mysli mówiąc 'usuwa zmienne' gdyż wyjście z zasięgu widoczności nie jest z tym jednak równoznacznie. Przynajmniej nie w PHP które jest samo w sobie memory leak'iem (IMG:style_emoticons/default/wink.gif) Pozdrawiam.
Ten post edytował Uriziel01 5.01.2012, 11:44:19 |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Akurat spojrzałem na kod pod kątem "np mamy funkcję", czyli jest ona tylko pewnym przykładem i temat należy poszerzyć o inne oraz nie wspomniane możliwości. Co do znikania z zasięgu i usuwaia to może źle się wyraziłem... Miałem na myśli gdy dany zakres już na dobre kończy działanie i nie wystąpi. Dla typowego skryptu jest to jego koniec, ale może to być choćby zakończenie połączenia (fclose, mysql_close), które zwalnia zasoby czy też uruchomienie destruktora. Ogólnie chyba najbliższe prawdy dla obiektówki będzie to co już napisałeś czyli "gdy liczba referencji spadnie do zera", zwłaszcza gdy obiekty grzebią się ze swoimi jakimiś zmiennymi statycznymi (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
~deniol13 w momencie wyjścia z bloku (jakiegokolwiek) zmienna zostałaby "zniszczona" pod warunkiem że zostałaby wcześniej zdefiniowana wewnątrz tego bloku. Akurat w tym przykładzie, który podałeś zmienna traci swój żywot w momencie zakończenia działania funkcji, w której została zdefiniowana.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
php w ogole ma gc? mi sie obilo o uszy ze wszelkie obiekty sa zwalniane dopiero po zakonczeniu skryptu
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zmienne będące poza zasięgiem danego bloku/instrukcji/funkcji/metody są automatycznie usuwane z pamięci (od php 5.3)
http://stackoverflow.com/questions/584960/...set-or-var-null http://stackoverflow.com/questions/1145775...ipt-leak-memory |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
czyli robiac duzo malych metod zamiast malo duzych zmniejszamy pamieciozernosc?(IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Wtedy w naturalny sposób współpracujemy z kulawym zbieraczem nieużytków z php i pamięć jest zwalniana przeważnie wtedy gdy trzeba. Chociaż to nie zawsze przekłada się na dodatnio na statystyki, zależy jakie to są funkcję. Jeśli to nie są funkcje które tworzą wiele zmiennych tymczasowych to różnicy pewnie nie będzie, albo będzie delikatnie na minus (definicja funkcji też zajmuje pamięć).
Ten post edytował -=Peter=- 5.01.2012, 20:18:33 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 19:53 |