Muistin varaaminen dynaamisesti¶
Dynaamisilla tietorakenteilla tarkoitetaan sellaisia rakenteita, joiden tarvitsema muisti varataan (ja mahdollisesti vapautetaankin) dynaamisesti ohjelmoijan kirjoittamien komentojen perusteella. Tämä tapahtuu ajoaikana.
Dynaamiset tietorakenteet sisältävät tavallisesti
useita, tyypiltään samoja alkioita.
Alkiotyyppi voidaan määritellä C++:n struct-rakenteen avulla,
jolla voi olla useita kenttiä.
Alkiot linkitetään toisiinsa niin, että kullakin alkiolla (struct:lla)
on linkkikenttä (osoitin), joka osoittaa säiliön seuraavaan alkioon.
Esimerkkejä dynaamisista tietorakenteista ovat linkitetty lista, pino, jono, puu, verkko jne. Nämä rakenteet tyypillisesti määritellään luokkina, ja niitä voidaan käsitellä kyseisen luokan jäsenfunktioiden avulla. Kuten minkä tahansa luokan tapauksessa ohjelmoijan vastuulla on toteuttaa kyseiset jäsenfunktiot.
Edellä mainituista rakenteista linkitetty lista esitellään tarkemmin myöhemmin tällä kierroksella.
Muuttujien elinaika ja sen kontrollointi¶
Tähän asti kaikki käytetyt muuttujat ovat olleet automaattisia, eli muistin varaaminen niille ja muistin vapauttaminen sen jälkeen kun sitä ei tarvita, on tapahtunut automaattisesti:
Kun muuttuja on määritelty, kääntäjä on huolehtinut siitä, että sille varataan jostain tarvittava määrä muistia.
Kun muuttujan elinaika päättyy, kääntäjä on silloinkin järjestellyt asian niin, että tarpeeton muisti on vapautettu.
On kuitenkin monia tilanteita, jossa joustavien tietorakenteiden toteuttamiseksi ohjelmoijan on pystyttävä itse kontrolloimaan muuttujan elinkaarta (aika muuttujan muistinvarauksesta sille varatun muistin vapauttamiseen). Tällaisia muuttujia, joiden elinkaaren kontrollointi on täysin ohjelmoijan vastuulla, kutsutaan dynaamisiksi muuttujiksi. Mekanismeja ja työkaluja, joilla dynaamisia muuttujia hallitaan, kutsutaan dynaamiseksi muistinhallinnaksi.
Jos vapaata muistia ei ole riittävästi jäljellä silloin, kun ohjelmoija yrittää sitä varata, aiheutuu poikkeus, joka keskeyttää ohjelman suorituksen. Kyseisen poikkeustilanteen käsittely on kuitenkin periaattellisella tasollakin sen verran haastavaa, että tällä kurssilla näytellään ikään kuin muisti ei koskaan loppuisi.