Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> composite - referencje
Cysiaczek
post
Post #1





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie będę tłumaczył wzorca, tylko skupie się na clue sprawy.

Mam powiedzmy 5-o elementową tablicę, z której pobieram jeden klucz i tworzę obiekt. Reszta "kolegów" z tablicy zostaje dodana do tego obiektu jako obiekty tego samego typu. Żebym mógł w czasie wykonania programu zmienić obiekt na którym pracuję, to do każdego z tych obiektów muszę również przekazać referencje pozostałych 4
Kompozyt przechowuje n*(n-1) referencji do innych obiektów tego samego typu.
Czyli mając 5 obiektów mam 20 referencji, przy 10 jest już 90 itd. Jak duże obciążenie może to wygenerować? Warto?

Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
cicik
post
Post #2





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


Dołożyłbym do tego jeszcze jeden problem.
Na php.net jakiś czas temu pojawiła się propozycja projektu w ramach google summer of code.
Polegać on miał na tym aby poprawić phpowego garbage collectora tak aby poprawnie zwalniał pamięć po obiektach tworzących cykl.

Wnioskuję stąd, że obecny garbage collector sobie z tym nie radzi.
W związku z tym, jeżeli będziesz miał trzy obiekty:
pierwszy ma referencję do drugiego, drugi do trzeciego i trzeci do pierwszego to grabage collector nie zwolni pamięci zajmowanej przez te obiekty nawet jeżeli z zewnątrz cyklu nie ma do nich referencji.
Taka właśnie sytuacja występuje u Ciebie.

Poza tym to nie prawda, że referencja nie zajmuje pamięci - zajmuje, na 32-bitowych maszynach dokładnie 4 bajty* .


* Dane dla języków kompilowanych (C, C++, Delphi, etc.) - nie wiem dokładnie jak jest w PHP, może to jeszcze w nim jest jakoś owijane w dodatkowe dane więc wtedy zajmować będzie więcej.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 28.12.2025 - 16:08