Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

16.1 Muistin käyttö

Karkeasti ottaen tavallisen ohjelman muistinkäyttö näyttäisi ajan funktiona seuraavalta:

	
	            ^
	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.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys