Prawdopodobnie każdy wpadł na ten problem przynajmniej raz w trakcie rozwoju:Jak uniknąć "zamiany śmierci" podczas rozwoju?
while(/*some condition here that somehow never will be false*/)
{
...
yourvector.push_back(new SomeType());
...
}
Jak widać program uruchamia się spuszczenie całej pamięci systemowej, zawieszenia się programu i system zaczyna zamieniać się jak szalony. Jeśli nie rozpoznasz problemu wystarczająco szybko i zabijesz proces, prawdopodobnie dostaniesz nieodpowiedzialny system w ciągu kilku sekund, gdy wskaźnik myszy nawet się nie rusza. Możesz albo poczekać na awarię programu z błędem "braku pamięci" (co może zająć kilka długich minut), albo na zresetowaniu komputera.
Jeśli nie można wyśledzić błąd natychmiast potem trzeba będzie kilka testów i resetuje się dowiedzieć, co jest bardzo irytujące ...
szukam sposób możliwie wielu platformach, aby zapobiec jakoś. Najlepszy byłby kod trybu debugowania, który kończy program, jeśli przydzielono mu zbyt dużo pamięci, ale w jaki sposób mogę śledzić ilość przydzielonej pamięci? Przesłanianie globalnych operatorów nowych i usuwania nie pomoże, ponieważ funkcja wolna, którą wywołuję w usuwaniu, nie da pojęcia, ile bajtów zostało zwolnionych.
Wszelkie pomysły doceniane.
Jakiego systemu operacyjnego używasz? Ile pamięci RAM? Jaki jest rozmiar pliku stronicowania? Niezbędne, aby wiedzieć. –
Jeśli masz skłonność do tego rodzaju błędów, po prostu wyłącz swap. Mam przed sobą ciężko pracującą maszynę programistyczną z czasem pracy ponad miesiąc. Znak wysokiej wody dla maksymalnej zastosowanej wymiany to 22 MB. (linux 2.6.32 Rdzeń 4GiB, swapiness 60) – msw