Programowanie (IDE, UML, Wzorce...)

GC - jak uniknąć wycieków pamięci

16 marca, 2008 o 19:55:07 Dodaj komentarz Poziom: 0 Permalink

Od dawna (ponad miesiąc) nie pisałem - może czas zamieścić coś

Pisałem dla zabawy GC i natrafiłem na problem - ciekawi jak zostały rozwiązane u innych (zaznaczam - całą wiedzę jaką na ten temat posiadam biorę z sieci. Jeśli w tym tekście są jakieś głupoty to bardzo przepraszam i proszę o wskazanie ich - ja się dopiero uczę). Mamy 3 obiekty: A, B i C. A korzysta z B, B z C a C z A. W jakiej kolejności wykonać destruktory?

Z koleji rezygnując z konstruktorów (albo bez gwarancji ich wykonania w przypadku cykli) może się to skończyć tym, że cienki obiekt stanowiący warstwę pośrednią między C i językiem zostanie odśmiecony a zasoby tego obiektu nie. I tak źle i tak niedobrze.

Jedyne co mi przychodzi do głowy to zadeklarowanie (jawne bądz niejawne) referencji jako potrzebnych destruktorowi albo niepotrzebnych. W ten sposób: W ten sposób pętla musiała by być stworzona z samych silnych (w odróżnieniu od słabych i normalnych, które zwykle są nazywane silnymi) referencji. Pytanie tylko czy:

  • Jest to w ogóle warte zachodu
  • Analiza kolejności destrukcji elementów nie zabierze trochę czasu

Komentarze do wpisu

Możesz śledzić odpowiedzi poprzez kanał RSS. Możesz dodać komentarz lub zostawić ślad (trackback) ze swojego bloga.

Jeszcze nie ma żadnych komentarzy. Twój może być pierwszy.

Dodaj komentarz

Textile Lite włączony ( szczegółowy opis znaczników ):