RUN - Ajaa sovelluksen ja näyttää miten muuttujat ja oliot luodaan pino- ja kekomuistiin ohjelman suorituksen aikana.
LOPETA - Demoaa sovelluksen päättymistä ja näyttää miten muisti vapautetaan. Pinomuisti vapautuu automaattisesti, mutta kekomuisti jää vuotamaan jos delete-operaattoria ei ole käytetty.
Tietokoneen RAM-muisti
RAM (Random Access Memory) eli keskusmuisti on tietokoneen nopea, väliaikainen muisti, johon tallennetaan ohjelmien suorituksen aikana tarvittavaa dataa. RAM-muisti jaetaan eri alueisiin:
Pinomuisti (Stack)
- Automaattinen muistinhallinta: Muuttujat ja oliot luodaan ja tuhotaan automaattisesti
- LIFO-periaate: Last In, First Out - viimeisenä lisätty poistetaan ensimmäisenä
- Nopea: Muistin varaaminen ja vapautus on erittäin nopeaa
- Rajoitettu koko: Pino on kooltaan rajallinen (tyypillisesti muutama megatavu)
- Käyttö C++:ssa: Paikalliset muuttujat ja oliot ilman
new-avainsanaa
Kekomuisti (Heap)
- Manuaalinen muistinhallinta: Ohjelmoijan vastuulla varata (
new) ja vapauttaa (delete) muisti
- Suuri koko: Paljon suurempi kuin pino (rajoituksena käytännössä vain RAM:n kokonaiskoko)
- Hitaampi: Muistin varaus ja vapautus on hitaampaa kuin pinossa
- Joustava: Muistia voi varata dynaamisesti ohjelman suorituksen aikana
- Käyttö C++:ssa: Dynaamisesti varatut oliot
new-operaattorilla
- Vaara: Muistivuodot (memory leaks) jos muistia ei vapauteta!
Hyvät käytännöt C++:ssa
- Suosi pinomuistia kun mahdollista - se on turvallisempaa ja nopeampaa
- Jos käytät
new-operaattoria, muista aina vapauttaa muisti delete-operaattorilla
- Aseta osoitin arvoon
nullptr vapautuksen jälkeen välttääksesi roikkuvat osoittimet
- Käytä modernissa C++:ssa älykkäitä osoittimia (
std::unique_ptr, std::shared_ptr) jotka hoitavat muistinhallinnan automaattisesti