אופטימיזציות¶
MicroPython משתמש במספר אופטימיזציות כדי לחסוך ב-RAM אך גם כדי להבטיח ביצוע יעיל של תוכניות. פרק זה דן בכמה מהאופטימיזציות הללו.
הערה
מיזוג מחרוזות (interning) ב-MicroPython ו-מפות ומילונים מפרטים אופטימיזציות נוספות על מחרוזות ומילונים.
בייטקוד קפוא (frozen)¶
כאשר MicroPython טוען קוד Python ממערכת הקבצים, תחילה עליו לנתח את הקובץ לכדי ייצוג זמני בזיכרון, ולאחר מכן לייצר בייטקוד לביצוע, ושניהם מאוחסנים בערימה (heap) (ב-RAM). הדבר עלול להוביל לשימוש בכמויות משמעותיות של זיכרון. ניתן להשתמש במהדר הצולב של MicroPython כדי לייצר קובץ .mpy, המכיל את הבייטקוד המהודר מראש עבור מודול Python. הוא עדיין ייטען לתוך RAM, אך הוא חוסך את התקורה הנוספת של שלב הניתוח.
כאופטימיזציה נוספת, ניתן ”להקפיא“ את הבייטקוד המהודר מראש מקובץ .mpy לתוך דמות הקושחה כחלק מתהליך הידור הקושחה הראשי, מה שאומר שהבייטקוד יבוצע מתוך ROM. הדבר עשוי להוביל לחיסכון משמעותי בזיכרון, ולהפחית את פיצול הערימה (heap).
ראו קובצי manifest של MicroPython למידע נוסף.
משתנים¶
MicroPython מעבד משתנים מקומיים וגלובליים באופן שונה. משתנים גלובליים מאוחסנים ומחופשים ממילון גלובלי המוקצה בערימה (heap) (שימו לב שלכל מודול יש dict נפרד משלו, ולכן מרחב שמות נפרד). משתנים מקומיים, לעומת זאת, מאוחסנים במחסנית הערכים של Python, אשר עשויה לשכון על מחסנית ה-C או על הערימה. ניגשים אליהם ישירות לפי ההיסט שלהם בתוך מחסנית Python, מה שיעיל יותר מחיפוש גלובלי ב-dict.
אורך שמות המשתנים הגלובליים משפיע גם על כמות ה-RAM שבשימוש, מכיוון שמזהים מאוחסנים ב-RAM. ככל שהמזהה קצר יותר, כך נעשה שימוש בפחות זיכרון.
ההיבט הנוסף הוא שמשתני const המתחילים בקו תחתי מטופלים כקבועים אמיתיים ואינם מוקצים או מתווספים למילון, ובכך נחסך מעט זיכרון. משתנים אלו משתמשים ב-const() מתוך ספריית MicroPython. לפיכך:
from micropython import const
X = const(1)
_Y = const(2)
foo(X, _Y)
מהודר ל:
X = 1
foo(1, 2)
הקצאת זיכרון¶
רוב מבני ה-MicroPython הנפוצים אינם מוקצים בערימה (heap). עם זאת, הבאים כן:
מבני נתונים דינמיים כמו רשימות, מיפויים וכו«;
פונקציות, מחלקות ומופעי אובייקטים;
ייבואים; וכן
השמה ראשונה של משתנים גלובליים (כדי ליצור את החריץ במילון הגלובלי).
לדיון מפורט על נקודת מבט ממוקדת-משתמש יותר על אופטימיזציה, ראו מיצוי מהירות MicroPython.