Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zwalnianie pamięci
pp-layouts
post 16.01.2010, 00:48:30
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 28.09.2007
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Wydaje mi się, że w PHP generalnie nie ma konieczności jawnego definiowania destruktorów obiektu, chyba, że chce się, żeby coś "na do widzenia" zrobiły, pamięć gdzie się tylko da jest automatycznie zwalniana, ale czy na pewno?

Powiedzmy, że mam wewnątrz metody coś takiego: $x = new krowa(); ..... return $x->wynik; Powiedzmy, że krowa to krowiasty obiekt, zawierający sporo danych. W mojej metodzie interesuje mnie tylko jedna właściwość tego obiektu, którą zwracam. Po każdym return $x->wynik pamięć obiektu jest zwalniana, prawda?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
marcio
post 16.01.2010, 02:06:38
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nie wiem na ile dziala "gb" w php potestuj sobie.

Jesli jednak nie ufasz to poprostu uzyj destruktor i tyle w klasie ktora jest "krowiasta".



--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
darko
post 16.01.2010, 02:11:21
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Samo return $x->wynik pamięci nie zwolni. Możesz jawnie zwalniać pamięć poprzez unset($x); ale w tym przypadku, kiedy zwracasz coś z metody, sposób ten się nie sprawdzi. Napisz może, do czego zmierzasz, bo - powiedzmy - "krowiasty obiekt" mnie zaciekawił winksmiley.jpg


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Zyx
post 16.01.2010, 09:49:06
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


PHP używa licznika referencji do określania czy pamięć należy zwolnić czy nie. unset usuwa jedynie referencję, a sam obiekt znika dopiero wtedy, gdy usunięta zostanie ostatnia. Wersje PHP poniżej 5.3.0 nie potrafią wykrywać cykli, tzn. obiekt A wskazuje na B, B na A, lecz do żadnego z nich nie ma dostępu z reszty skryptu. Dopiero najnowsze PHP potrafi się tym zająć, choć można to wyłączyć, a ponadto na bugtrackerze są zgłoszone jakieś niepotwierdzone przez twórców błędy o wyciekach pamięci. Osobiście skłaniam się ku temu, że jakieś wycieki tam są, bo to niemożliwe jest, żeby po wyczyszczeniu ilość zajętej pamięci... rosła.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
XianN
post 24.01.2010, 23:03:44
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 9
Dołączył: 12.11.2005
Skąd: ze wnowu?!

Ostrzeżenie: (0%)
-----


Polecam lekture*: garbage collector, powinna wyjasnic wszelkie watpliwosci.

--
* - RTFM!


--------------------
Yes, sex is always the answer, it's never a question
Cos' the answers yes, oh the answers yes.
Not just a suggestion, if you ask the question
Then its always yes, yeah!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2025 - 17:57