Optimalizációk¶
A MicroPython számos optimalizációt használ a RAM megtakarítására, de a programok hatékony végrehajtásának biztosítására is. Ez a fejezet ezek közül néhány optimalizációt tárgyal.
Megjegyzés
A MicroPython sztring-internálás és a Leképezések és szótárak a sztringekre és a szótárakra vonatkozó további optimalizációkat részletezi.
Befagyasztott bájtkód¶
Amikor a MicroPython Python kódot tölt be a fájlrendszerből, először elemeznie kell a fájlt egy ideiglenes, memóriában tárolt reprezentációvá, majd bájtkódot kell generálnia a végrehajtáshoz, és mindkettő a kupacon (a RAM-ban) tárolódik. Ez jelentős mennyiségű memória felhasználásához vezethet. A MicroPython keresztfordító használható egy .mpy fájl generálására, amely egy Python modul előre lefordított bájtkódját tartalmazza. Ez továbbra is betöltődik a RAM-ba, de elkerüli az elemzési szakasz további terhelését.
További optimalizációként a .mpy fájlból származó, előre lefordított bájtkód „befagyasztható” a firmware-képbe a fő firmware fordítási folyamatának részeként, ami azt jelenti, hogy a bájtkód a ROM-ból fog végrehajtódni. Ez jelentős memóriamegtakarításhoz vezethet, és csökkenti a kupac töredezettségét.
További információért lásd: MicroPython manifest fájlok.
Változók¶
A MicroPython a lokális és a globális változókat eltérően kezeli. A globális változók egy globális szótárban tárolódnak és onnan kerülnek kikeresésre, amely a kupacon van lefoglalva (megjegyzendő, hogy minden modulnak saját külön szótára, tehát külön névtere van). A lokális változók ezzel szemben a Python értékveremben tárolódnak, amely a C vermen vagy a kupacon élhet. Ezek közvetlenül, a Python vermen belüli eltolásuk szerint érhetők el, ami hatékonyabb, mint egy globális kikeresés egy szótárban.
A globális változónevek hossza is befolyásolja, mennyi RAM-ot használ a rendszer, mivel az azonosítók a RAM-ban tárolódnak. Minél rövidebb az azonosító, annál kevesebb memória használódik.
A másik szempont, hogy azok a const változók, amelyek aláhúzással kezdődnek, valódi konstansként kezelődnek, és nem foglalódnak le, illetve nem kerülnek be egy szótárba, ezáltal némi memóriát megtakarítva. Ezek a változók a MicroPython könyvtár const() függvényét használják. Ezért:
from micropython import const
X = const(1)
_Y = const(2)
foo(X, _Y)
Erre fordul:
X = 1
foo(1, 2)
Memóriafoglalás¶
A legtöbb gyakori MicroPython konstrukció nem foglalódik le a kupacon. A következők azonban igen:
Dinamikus adatszerkezetek, mint listák, leképezések stb.;
Függvények, osztályok és objektumpéldányok;
importok; és
Globális változók első hozzárendelése (a hely létrehozásához a globális szótárban).
Az optimalizáció felhasználóközpontúbb nézőpontjáról szóló részletes tárgyalásért lásd: A MicroPython sebességének maximalizálása.