1. Strona główna
  2. Sylabus dla poziomu zaawansowanego – Techniczny analityk testowy (wersja z 19.10.2012)
  3. 3. Techniki analityczne
  4. 3.3 Analiza dynamiczna
  5. 3.3.2 Wykrywanie wycieków pamięci

3.3.2 Wykrywanie wycieków pamięci

Z wyciekiem pamięci mamy do czynienia w sytuacji, w której program przydziela dostępne obszary pamięci operacyjnej (RAM), ale nie zwalnia ich, gdy przestają być potrzebne. Dany obszar pamięci pozostaje wówczas przydzielony i nie można go ponownie wykorzystać. Jeśli dzieje się tak często lub jeśli dostępne zasoby pamięci są bardzo ograniczone, programowi może zabraknąć możliwej do wykorzystania pamięci. Dawniej odpowiedzialność za właściwe posługiwanie się pamięcią ponosił programista. Program dokonujący alokacji musiał zwalniać we właściwym zakresie wszelkie dynamicznie przydzielane obszary pamięci w celu uniknięcia wycieku. Obecnie wiele środowisk programistycznych zawiera automatyczne lub półautomatyczne funkcje „odśmiecania” pamięci, które pozwalają odzyskać alokowaną pamięć bez bezpośredniej interwencji programisty. W takim przypadku, gdy dotychczas przydzielona pamięć jest zwalniana w ramach procesu automatycznego czyszczenia, zlokalizowanie wycieków pamięci może być bardzo trudne.

Wycieki pamięci powodują problemy, które narastają z czasem i nie zawsze są natychmiast widoczne. Taka sytuacja może mieć miejsce na przykład krótko po zainstalowaniu oprogramowania lub zrestartowaniu systemu, co często zdarza się podczas testowania. Z tego powodu negatywne skutki wycieków pamięci są często dostrzegane dopiero po rozpoczęciu eksploatacji programu.

Jednym z objawów wycieku pamięci jest stopniowe wydłużanie się czasu reakcji systemu, co może ostatecznie doprowadzić do jego awarii. Skutki takiej awarii można co prawda usunąć poprzez ponowne uruchomienie systemu, ale jest to niewygodne, a niekiedy może nawet okazać się niemożliwe.

Wiele narzędzi do analizy dynamicznej pozwala zidentyfikować obszary kodu, w których występują wycieki pamięci, dzięki czemu można wprowadzić odpowiednie poprawki. Proste programy do monitorowania pamięci również pozwalają się zorientować, czy ilość dostępnej pamięci z czasem maleje, chociaż ustalenie dokładnej przyczyny pogorszenia wydajności wymaga w takim przypadku przeprowadzenia dalszej analizy.

Należy również wziąć pod uwagę inne przyczyny wycieków, na przykład związane z uchwytami plików, semaforami czy pulami połączeń wykorzystywanymi przez zasoby.