Oliot, osoittimet ja taulukot
Muisti ja muistiosoitteet
Tutustutaan seuraavaksi hyvin yleisellä tasolla ja yksinkertaistaen siihen, mitä tietokoneen keskusmuisti on. Ohjelman käsittelemä tieto on suorituksen aikana keskusmuistissa ainakin jossakin vaiheessa.*
Muistia voi ajatella jonona numeroituja lokeroita:
Jokaiseen lokeroon prosessori voi tallentaa pienen määrän tietoa. Yhtä lokeroa kutsutaan muistipaikaksi ja sen järjestysnumeroa muistiosoitteeksi.
Tavuja ja bittejä muistissa
Tässä yksinkertaistetussa mallissa muistipaikkaan mahtuu yksi tavu (byte), joka koostuu kahdeksasta bitistä. Tietokone käsittelee muistia tavallisesti tavua suurempina kokonaisuuksina.
Yhteen muistipaikkaan mahtuu siis tieto, jonka esittämiseen riittää 8 bittiä, kuten tavallisesti yksi char. Jos tietotyyppi tarvitsee enemmän bittejä, sen esitykseen käytetään useita peräkkäisiä muistipaikkoja.
Jos int-tyyppi on 32-bittinen ja tavussa on 8 bittiä, kokonaisluku vie neljä tavua:
Vastaavasti 64-bittinen double tarvitsee kahdeksan tavua:
Samoihin muistipaikkoihin voidaan eri aikoina tallentaa eri tyyppistä tietoa. Koska tietokoneen muistissa kaikki esitetään bitteinä, pelkkä bittijono ei kerro, miten arvo pitäisi tulkita. Tieto tarvitsee tyypin, jotta sitä osataan käsitellä oikein.
Muuttuja ja sen muistiosoite
C++:ssa muuttujan määrittely antaa nimen ohjelmassa käsiteltävälle arvolle. Kääntäjä huolehtii siitä, että arvo saa tarvitsemansa tallennustilan ja että sen tyyppi tunnetaan. Yksinkertaistetussa muistimallissa muuttujan nimen ajatellaan viittaavan niihin muistipaikkoihin, joihin sen arvo on tallennettu.
Esimerkiksi kokonaislukumuuttuja määritellään näin:
int luku;
Kääntäjä varaa muuttujalle sen tarvitseman tallennustilan:
Kun ohjelmakoodissa käytetään nimeä luku, sillä tarkoitetaan muuttujan arvoa. Ohjelman suoritusmalli, optimoinnit ja käytettävä ympäristö voivat vaikuttaa siihen, miten arvo käytännössä sijoitetaan, mutta muistiosoite tarjoaa hyödyllisen perusmallin osoittimien ymmärtämiseen.
Muista nämä käsitteet
- Muistipaikka sisältää tallennetun tiedon.
- Muistiosoite yksilöi muistipaikan.
- Muuttuja on ohjelmakoodissa käytettävä nimi tyypitetyille tiedoille.
- Muuttujaan liittyy tallennuspaikka ja siten myös muistiosoite tämän yksinkertaistetun mallin mukaan.*
Tämä ei ole koko kuvaus tietokoneen muistista: esimerkiksi kaikkia ohjelman arvoja ei välttämättä sijoiteta yksinkertaisesti nimettyihin muistipaikkoihin. Perusidea riittää kuitenkin osoitteiden ja osoittimien jatkokäsittelyyn.