zwalnianie pamięci - sprawdzenie

0

Witam, mam pytanie czy da się jakoś sprawdzić w C++ czy wcześniej zaalokowana pamięć została całkowicie zwolniona?
Zrobiłem sobie funkcję, która tworzy tablicę 3D z różną wielkością wierszy i teraz mam małe obawy czy wszystko jest zwalniane jak należy - więc chciałem to jakoś sprawdzić.
pozdrawiam

0

Valgrind wydaje się być narzędziem, którego szukasz.

0
Zjarek napisał(a):

Valgrind wydaje się być narzędziem, którego szukasz.

dzięki, mam nadzieję, że nie jest trudne w obsłudze :)

Mam jeszcze jedno pytanie bo zaczęło mnie to niepokoić.
napisałem sobie program, który tworzy bardzo dużą tablicę -> potem przypisuje jej elementom jakieś wartości -> następnie zwalnia miejsce w pamięci.

Przy pierwszym uruchomieniu tego programu:

  1. zarezerwowanie pamięci trwało około 30 sec.
  2. przypisanie wartości około 60 sec.
  3. zwolnienie pamięci 5 sec.

gdy ponownie uruchomiłem program pierwsze dwie operacje skróciły się do około 3 sekund.
Czy może mi ktoś wyjaśnić ten fenomen -> z czego on wynika i czy to jest prawidłowe?
W końcu po pierwszym wykonaniu programu: pamięć została zwolniona a program zamknięty -> więc skąd takie przyśpieszenie tych operacji przy ponownym uruchomieniu programu?
Po ponownym uruchomieniu komputera - dokładnie to samo -> za pierwszym razem kilkadziesiąt sekund a za drugim razem dosłownie kilka...

0

Zgaduję że pierwsze uruchomienie programu wymagało od systemowego GC zwolnienia dużego spójnego bloku pamięci. Przy ponownym uruchomieniu taki blok już istnieje więc GC nie musi się bawić w zwalnianie, przesuwanie i konsolidację.

0

Dzięki, tak właśnie myślałem - chciałem się upewnić :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1