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
Valgrind wydaje się być narzędziem, którego szukasz.
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:
- zarezerwowanie pamięci trwało około 30 sec.
- przypisanie wartości około 60 sec.
- 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...
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ę.
Dzięki, tak właśnie myślałem - chciałem się upewnić :)