^
muistin |
kaytto | +-------------------------------+
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
+------------------------------------------->
ohjelman ohjelman
alku loppu
Edellinen kuva on hieman yksinkertaistettu, koska "oikeasti" aliohjelmien
lokaalit muuttujat
(automaattiset muuttujat)
syntyvät aliohjelmaan tultaessa ja häviävät aliohjelmasta
poistuttaessa. Näin ollen käytetyn muistin yläraja vaihtelee
sen mukaan mitä aliohjelmia on kesken suorituksen.Dynaamisia muuttujia voidaan tarvittaessa luoda ja kun muistitilaa ei enää tarvita, voidaan vastaavat muuttujat vapauttaa:
^
muistin |
kaytto | +--+
| +----+ | | +---+
| | | | | +-+ |
| +--+ +----+ +---+ +-----+
| | |
| | |
+-------+----+----+--+---+-+---+------------>
ohjelman malloc calloc malloc ohjelman
alku free free realloc loppu
free
Näin muistin maksimimäärä saattaa pysyä huomattavasti
pienempänä kuin ilman dynaamisia muuttujia. Idea on siis siinä,
että muistia varataan aina vain sen verran, kuin sillä hetkellä
tarvitaan. Kun muistia ei enää tarvita, vapautetaan muisti.Ajonaikana luotaviin muuttujiin tarvitaan osoitteet. Nämä osoitteet pitää sitten tallettaa johonkin. Talletus voitaisiin tehdä esimerkiksi taulukkoon tai sitten alkioista pitää muodostaa linkitetty lista.