Alocarea dinamică a memoriei

Alocarea dinamică a memoriei  este o metodă de alocare a memoriei RAM a computerului pentru obiecte dintr-un program, în care alocarea memoriei pentru un obiect este efectuată în timpul execuției programului .

Cu alocarea dinamică a memoriei, obiectele sunt plasate în așa-numitul. „ heap ” ( ing.  heap ): la construirea unui obiect, se indică dimensiunea memoriei solicitate pentru obiect, iar, dacă reușește, zona de memorie alocată, relativ vorbind, este „eliminată” din „ heap ”, devenind inaccesibil în timpul operațiunilor ulterioare de alocare a memoriei. O operație care are sens opus este eliberarea memoriei ocupate anterior de un obiect: memoria eliberată, de asemenea, vorbind condiționat, este returnată în „ heap ” și devine disponibilă în timpul operațiunilor ulterioare de alocare a memoriei.

Pe măsură ce sunt create obiecte noi în program, cantitatea de memorie disponibilă scade. De aici și necesitatea de a elibera constant memoria alocată anterior. Într-o situație ideală, programul ar trebui să elibereze complet toată memoria necesară pentru lucru. Prin analogie cu aceasta, fiecare subrutină ( procedură sau funcție ) trebuie să asigure eliberarea întregii memorie alocate în timpul execuției sale. Gestionarea necorespunzătoare a memoriei duce la așa-numita. „ scurgeri ” de memorie, atunci când memoria alocată nu este eliberată. Scurgerile multiple de memorie pot epuiza toată memoria RAM și pot perturba sistemul de operare.

O altă problemă este problema fragmentării memoriei. Alocarea memoriei are loc în blocuri - fragmente continue de RAM (astfel, fiecare bloc are câțiva octeți consecutivi ). La un moment dat, heap-ul poate pur și simplu să nu aibă un bloc de o dimensiune adecvată și chiar dacă există suficientă memorie liberă pentru a găzdui obiectul, operațiunea de alocare a memoriei va eșua.

Pentru a gestiona alocarea dinamică a memoriei, se folosește un „colector de gunoi” - un obiect de program care monitorizează alocarea memoriei și asigură eliberarea în timp util a acesteia. Colectorul de gunoi se asigură, de asemenea, că blocurile libere au dimensiunea maximă și, dacă este necesar, defragmentează memoria.

Elemente de implementare

Limbajul de programare C (C)

Limbajul de programare C are următoarele funcții pentru alocarea dinamică a memoriei incluse în biblioteca standard :

Limbajul de programare C++

C ++ are doi operatori:

Limbajul de programare Object Pascal

Obiectul Pascal are doi operatori:

Vezi și

Surse