Subskrybujesz dość powszechne nieporozumienie, że bloki sterty, które nie są zwalniane, ale wciąż dostępne w momencie istnienia programu, to przecieki. To nie jest prawda. Wyciekłe bloki to te, których wskaźnik nie ma odniesienia, więc nie można ich uwolnić.
Przez lata gry z (i łamaniem) partii doskonale dobrych jąder, nigdy nie udało mi się wystarczająco złamać menedżera pamięci wirtualnej do punktu, w którym nie odzyskał już całej przestrzeni adresowej procesu po jego wyjściu. Jeśli nie pracujesz z jądrem wyraźnie oznaczonym jako "nowy i eksperymentalny", będziesz miał więcej szczęścia, wygrywając loterię, niż znajdując system, który nie zatrudnia efektywnego menedżera pamięci wirtualnej.
Nie kładź crufta w swoim kodzie, aby uzyskać doskonały wynik w Valgrind. Jeśli nie masz żadnych prawdziwych zadań porządkowych, aby wykonać inne niż zwolnienie pamięci, że nadal ma prawidłowe referencje, nie musisz się martwić. Jeśli ktoś rzuca do twojego programu kill -9
, nie będziesz w stanie go obsłużyć i zobaczą stare zachowanie.
Jeśli masz deskryptory plików do czyszczenia, udostępnione blokady do zrzeczenia się, strumienie do spłukiwania lub cokolwiek innego musi się wydarzyć, aby inne procesy Cię nie ominęły, kiedy odszedłeś, za wszelką cenę to załatw. Po prostu nie dodawaj kodu, który nie robi nic, aby rozwiązać problem, po prostu wydaje się to głupie.
Uwaga
ten był pierwotnie zamiar być komentarz, ale to zdecydowanie zbyt długo i tak marszczy brwi na napisanie powieści jeden komentarz na raz.
Czy ktoś może proszę/Linux/Unix/uogólnić to? –