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.
Limbajul de programare C are următoarele funcții pentru alocarea dinamică a memoriei incluse în biblioteca standard :
C ++ are doi operatori:
Obiectul Pascal are doi operatori: