Memoria dinamică - studopediya

Toate variabilele declarate în program sunt plasate într-o regiune de memorie continuă numit segmentul de date. Lungimea segmentului de date determinat 80x86 arhitectura microprocesor si este 65536 bytes, care poate provoca dificultăți în manipularea unor cantități mari de date. Pe de altă parte, capacitatea de memorie de calculator personal este suficient pentru o soluție de succes a problemelor cu dimensiuni mari de date. O cale de ieșire este utilizarea așa-numita memorie dinamică.







Memoria dinamică - o memorie a unui calculator personal furnizate de program în timpul funcționării sale, mai puțin segmentul de date (64K), stiva (de obicei 16KB) și corpul propriu-zis al programului. În mod implicit dimensiunea heap este determinată de toate memoria disponibilă pe computer.

Memoria dinamică este utilizat pentru procesarea matrici mari de date de dimensiuni. Multe probleme practice sunt dificil sau imposibil de rezolvat fără utilizarea memoriei dinamice. Alocarea dinamică înseamnă utilizarea datelor de memorie direct dinamic în timpul funcționării programului. În schimb, plasarea statică efectuate Turbo Pascal compilator în timpul compilării programului. Alocarea dinamică nu sunt cunoscute de orice tip sau cantitate de date care urmează să fie plasate, ele nu pot fi accesate prin nume ca o variabilă statică.

Astfel, orice indice este un agregat de două cuvinte (tip Word date) sunt tratate ca un segment și un offset. Utilizarea indicii pot fi plasate în orice tip de date de memorie dinamice.

În Turbo Pascal este posibil să se declare un pointer și nu o leagă în același timp cu un anumit tip de date. Pentru aceasta este de tip Pointer standard:

Indicatori de acest tip sunt numite netipizat. Cu ajutorul lor este convenabil să aloce dinamic structura de date și tipul de care sunt schimbate în cursul programului.

este foarte posibil, în timp ce







interzise, ​​deoarece r1i r3ukazyvayut pe diferite tipuri de date. Această restricție, cu toate acestea, nu se aplică indicii fără tip, astfel încât să putem scrie

Contactarea valorile date de tip de variabile, după cum urmează:

Structura memoriei dinamice

Locație heap în memoria calculatorului

Toate operațiunile sunt efectuate cu o grămadă de a rula subrutine speciale numite de către administratorul gramada. Se atașează automat la programul de linker-ul Turbo Pascal și păstrează o evidență a tuturor fragmentelor libere într-o grămadă.

Proceduri și funcții pentru lucrul cu memorie dinamică

CSEG - returnează valoarea stocată în registrul de CSmikroprotsessora (la începutul segmentului de program înregistrare CSsoderzhitsya începutul codului de program). Rezultat cuvânt a revenit la un tip cuvânt.

Aruncați (tipizirovannyy_ukazatel) - procedură returnează o grămadă de fragment de memorie dinamic, care anterior au fost rezervate pentru un pointer tastat. Când se reutilizează procedura în raport cu eroarea fragmentul de execuție deja eliberat are loc.

Funcția DSEG returnează valoarea stocată în microprocesor registru DS (la începutul segmentului de program înregistrare de date DSsoderzhitsya programul începe). Rezultat cuvânt a revenit la un tip cuvânt.

FreeMem (netipizirovannyy_ukazatel, dimensiune) - procedura returnează o grămadă de fragment de memorie dinamică, care anterior au fost rezervate pentru indicatorul netipizat. Mărime Nu - lungimea în octeți a fragmentului eliberat.

GetMem (netipizirovannyy_ukazatel, mărime) - rezervele de procedură fragment pointer netipizat de mărimea necesară a memoriei dinamice.

Mark (PTR) - procedura stochează valoarea curentă HeapPtr heap indicatorul. Aici PTR - un pointer la orice tip, în care valoarea curentă este returnată HeapPtr. Folosit împreună cu procedura Releasedlya eliberarea haldei.

MaxAvail - returnează dimensiunea, în octeți, cea mai mare parte contiguă a gramada. Rezultatul este de tip LongInt.

MemAvail - funcția returnează dimensiunea în octeți de spațiu liber total heap. Rezultatul este de tip LongInt.

New (tipizirovannyy_ukazatel) - procedura este rezervată pentru introducerea variabilei fragment gramada. Noua procedură poate fi numit ca o funcție. În acest caz, referința parametru este tipul de variabilă, plasate într-o grămadă, și funcția Nou returnează un pointer. exemplu:

PTR (SEG, OFS) - funcția returnează o valoare de tip Pointerpo segment predeterminat segi OFS offset. Acolo SEG - expresie de tip Word care cuprinde un segment; OFS- tip WORD de expresie care cuprinde offset. Valoarea de returnare a unei funcții este compatibil cu un pointer la orice tip.

Sizeof (x) - funcția returnează lungimea în octeți a reprezentării interne a obiectului menționat. În cazul în care x - numele unei variabile, funcție sau de tip.