Table of Contents
Rekursiivisia algoritmeja käytetään yleisesti sulautetuissa järjestelmissä monimutkaisten ongelmien ratkaisemiseksi. Niiden muistin käytön ymmärtäminen on olennaista suorituskyvyn optimoimiseksi ja järjestelmän vakauden varmistamiseksi. Tässä artikkelissa selitetään, miten lasketaan muistinkulutus rekursiivisissa toiminnoissa sulautetuissa ympäristöissä.
Rekursiivisen toiminnan muistikomponenttien ymmärtäminen
Muistin käyttö rekursiivisissa algoritmeissa sisältää pääasiassa kaksi osaa: pinomuistin ja datamuistin. Nauha tallentaa tietoa jokaisesta aktiivisesta funktiopuhelusta, mukaan lukien paikalliset muuttujat ja palautusosoitteet. Datamuistissa on ohjelman käyttämät staattiset ja globaalit muuttujat.
Lasketaan pinon muistin käyttöä
Rekursiivinen toiminto käyttää pinomuistia, joka riippuu rekursiomuodon enimmäissyvyydestä ja kunkin funktiokutsun pinorungon koosta. Kaava on:
Enimmäiskäyttö pinon enimmäiskäyttö = enimmäistakaisinoton syvyys × pinon kehyksen koko[]
Määrittää kunkin pino kehyksen, harkita paikallisia muuttujia, tallennettuja rekistereitä, ja paluuosoitteita. Upotetut järjestelmät ovat usein rajallinen pino tilaa, joten arvioida tämän tarkasti on kriittinen.
Datamuistin käytön arviointi
Datamuistin kulutus riippuu rekursiivisen prosessin aikana käytetyistä staattisista ja maailmanlaajuisista muuttujista. Nämä muuttujat jaetaan kerran ja pysyvät ohjelman keston ajan. Käytetty datamuisti on kaikkien näiden muuttujien summa.
Käytännön laskenta Esimerkki
Oletetaan rekursiivinen toiminto on enintään syvyys 10 puhelua, ja jokaisen puhelun pino runko on 64 tavua.
10 × 64 tavua = 640 tavua
Jos funktiossa käytetään 200 tavua globaaleja muuttujia, muistin kokonaiskäyttö yhdistää pino- ja datamuistin, joka tarjoaa kattavan kuvan resurssien kulutuksesta.