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.