Optimoinnit¶
MicroPython käyttää useita optimointeja RAM-muistin säästämiseksi mutta myös ohjelmien tehokkaan suorittamisen varmistamiseksi. Tässä luvussa käsitellään joitakin näistä optimoinneista.
Muista
Kohdat MicroPythonin merkkijonojen sisäistäminen ja Kartat ja sanakirjat kuvaavat tarkemmin muita merkkijonoihin ja sanakirjoihin liittyviä optimointeja.
Jäädytetty tavukoodi¶
Kun MicroPython lataa Python-koodia tiedostojärjestelmästä, sen on ensin jäsennettävä tiedosto väliaikaiseksi muistinsisäiseksi esitykseksi ja sitten luotava suoritusta varten tavukoodi, jotka molemmat tallennetaan kekoon (RAM-muistiin). Tämä voi johtaa merkittävään muistin käyttöön. MicroPython-ristiinkääntäjää voidaan käyttää .mpy-tiedoston luomiseen, joka sisältää esikäännetyn tavukoodin Python-moduulille. Tämä ladataan edelleen RAM-muistiin, mutta se välttää jäsennysvaiheen lisäkuorman.
Lisäoptimointina .mpy-tiedoston esikäännetty tavukoodi voidaan ”jäädyttää” laiteohjelmiston levykuvaan osana päälaiteohjelmiston käännösprosessia, mikä tarkoittaa, että tavukoodi suoritetaan ROM-muistista. Tämä voi johtaa merkittävään muistin säästöön ja vähentää keon pirstoutumista.
Katso lisätietoja kohdasta MicroPython-manifestitiedostot.
Muuttujat¶
MicroPython käsittelee paikallisia ja globaaleja muuttujia eri tavoin. Globaalit muuttujat tallennetaan ja haetaan globaalista sanakirjasta, joka varataan keosta (huomaa, että jokaisella moduulilla on oma erillinen sanakirjansa, siis erillinen nimiavaruus). Paikalliset muuttujat sen sijaan tallennetaan Pythonin arvopinoon, joka voi sijaita C-pinossa tai keossa. Niihin päästään käsiksi suoraan niiden Python-pinon sisäisen siirtymän perusteella, mikä on tehokkaampaa kuin globaali haku sanakirjasta.
Globaalien muuttujien nimien pituus vaikuttaa myös siihen, kuinka paljon RAM-muistia käytetään, sillä tunnisteet tallennetaan RAM-muistiin. Mitä lyhyempi tunniste, sitä vähemmän muistia käytetään.
Toinen näkökohta on se, että alaviivalla alkavia const-muuttujia käsitellään varsinaisina vakioina, eikä niitä varata tai lisätä sanakirjaan, mikä säästää jonkin verran muistia. Nämä muuttujat käyttävät MicroPython-kirjaston const()-funktiota. Näin ollen:
from micropython import const
X = const(1)
_Y = const(2)
foo(X, _Y)
Kääntyy muotoon:
X = 1
foo(1, 2)
Muistin varaaminen¶
Suurinta osaa yleisistä MicroPython-rakenteista ei varata keosta. Seuraavat kuitenkin varataan:
Dynaamiset tietorakenteet kuten listat, kuvaukset jne.;
Funktiot, luokat ja oliot;
tuonnit; ja
Globaalien muuttujien ensimmäinen sijoitus (paikan luomiseksi globaaliin sanakirjaan).
Yksityiskohtaisempaa, enemmän käyttäjälähtöistä keskustelua optimoinnista on kohdassa MicroPython-nopeuden maksimointi.