Jump to content
fedorffixxzz

[Teoretic] Rezolva memory leak

Recommended Posts

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 etajului

2. pune etajul dorit in memorie

3. am ajuns la etajul dorit?

4. daca da, atunci am terminat

4.1 altfel:

4.1.1 asteptam pana liftul intra in starea de idle

4.1.2 porneste catre etajul dorit

4.1.3 elibereaza resursele folosite pentru stocarea # etajului

Sursa: https://en.wikipedia.org/wiki/Memory_leak#An_example_of_memory_leak

Alte variante si cu ce design ati veni, avand ca obiectiv facilitarea intre etaje de urgenta etc. Argumentati si extindeti discutia in alte exemple :-) *NIX?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...