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
zwalnianie pamięci - sprawdzenie
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
Valgrind wydaje się być narzędziem, którego szukasz.
- Rejestracja: dni
- Ostatnio: dni
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...
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
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ę.