fedorffixxzz Posted June 1, 2013 Report Posted June 1, 2013 Un nou cartier rezidential este construit, iar tu esti programatorul principal si arhitectul software-ului pentru liftul avansat in mai multe blocuri. Urmatorul pseudocod reprezinta modul tau (eronat) de a gandi soft-ul pana acum:La apasarea butonului:1. aloca memorie ce va fi folosita pentru a retine numarul etajului2. pune etajul dorit in memorie3. am ajuns la etajul dorit?4. daca da, atunci am terminat4.1 altfel:4.1.1 asteptam pana liftul intra in starea de idle4.1.2 porneste catre etajul dorit4.1.3 elibereaza resursele folosite pentru stocarea # etajuluiSursa: https://en.wikipedia.org/wiki/Memory_leak#An_example_of_memory_leakAlte variante si cu ce design ati veni, avand ca obiectiv facilitarea intre etaje de urgenta etc. Argumentati si extindeti discutia in alte exemple *NIX? Quote
M2G Posted June 1, 2013 Report Posted June 1, 2013 Dealoci memoria si in momentul in care esti la etajul curent.Sau folosesti SCADE si iti faci un automat din specificatii. Codul generat va fi garantat ca nu contine memory leaks si buffer overflows. Cod SIL4.Definesti o stare idle in care liftul nu face nimic. Cand ai ajuns in starea aceea dealoci memoria. Faci un modul de diagnoza si salvezi stari la anumite momente de timp. Cand ai detectat un caz exceptional, revii la acel checkpoint.Folosesti garbage collection daca dispui de un astfel de sistem.Folosesti librarii STL daca scrii C++.Nu am inteles la ce te referi prin "etaje de urgenta". Daca te referi la accesul autoritatilor poti avea o anumita cheie in lift si in momentul in care este actionata, liftul intra intr-o stare privilegiata si urmeaza un set de reguli definit in astfel de sitatii ignorand alte comenzi exterioare si trecand din starea curenta direct in starea privilegiata. (ex. cineva urca la etajul 20. Autoritatile cheama liftul la parter. Liftul se opreste, incepe sa coboare ignorand starea precedenta.)In fine, ideea la memory leak este sa dealoci tot timpul ce ai alocat manual. Daca scrii in C++, la fiecare new trebuia sa fie un delete. La fiecare malloc, un free etc... Astea depind de experienta programatorului, daca uita sa le puna sau nu. Quote