Optimizasyonlar

MicroPython, RAM tasarrufu yapmak ama aynı zamanda programların verimli yürütülmesini sağlamak için çeşitli optimizasyonlar kullanır. Bu bölümde bu optimizasyonlardan bazıları ele alınmaktadır.

Not

MicroPython dize içselleştirme (string interning) ve Eşlemeler ve Sözlükler bölümleri dizeler ve sözlükler üzerindeki diğer optimizasyonları ayrıntılı olarak açıklar.

Dondurulmuş bayt kodu

MicroPython, Python kodunu dosya sisteminden yüklediğinde, önce dosyayı geçici bir bellek içi temsile ayrıştırmalı ve ardından yürütme için bayt kodu oluşturmalıdır; bunların her ikisi de yığında (RAM’de) depolanır. Bu, önemli miktarda bellek kullanımına yol açabilir. MicroPython çapraz derleyicisi, bir Python modülü için önceden derlenmiş bayt kodunu içeren bir .mpy dosyası oluşturmak için kullanılabilir. Bu yine de RAM’e yüklenir, ancak ayrıştırma aşamasının ek yükünden kaçınır.

Daha ileri bir optimizasyon olarak, bir .mpy dosyasındaki önceden derlenmiş bayt kodu, ana aygıt yazılımı derleme sürecinin bir parçası olarak aygıt yazılımı görüntüsüne “dondurulabilir”; bu da bayt kodunun ROM’dan yürütüleceği anlamına gelir. Bu, önemli bir bellek tasarrufuna yol açabilir ve yığın parçalanmasını azaltabilir.

Daha fazla bilgi için MicroPython manifest dosyaları bölümüne bakın.

Değişkenler

MicroPython, yerel ve genel değişkenleri farklı şekilde işler. Genel değişkenler, yığında tahsis edilen genel bir sözlükte depolanır ve oradan aranır (her modülün kendi ayrı sözlüğü, dolayısıyla ayrı ad alanı olduğunu unutmayın). Yerel değişkenler ise C yığınında veya yığında bulunabilen Python değer yığınında depolanır. Bunlara doğrudan Python yığını içindeki ofsetleri üzerinden erişilir; bu, bir sözlükteki genel bir aramadan daha verimlidir.

Genel değişken adlarının uzunluğu da kullanılan RAM miktarını etkiler çünkü tanımlayıcılar RAM’de depolanır. Tanımlayıcı ne kadar kısa olursa o kadar az bellek kullanılır.

Diğer husus ise, alt çizgiyle başlayan const değişkenlerinin gerçek sabitler olarak ele alınması ve bir sözlükte tahsis edilmemesi veya eklenmemesidir, dolayısıyla bir miktar bellek tasarrufu sağlanır. Bu değişkenler MicroPython kütüphanesinden const() işlevini kullanır. Bu nedenle:

from micropython import const

X = const(1)
_Y = const(2)
foo(X, _Y)

Şuna derlenir:

X = 1
foo(1, 2)

Bellek tahsisi

Yaygın MicroPython yapılarının çoğu yığında tahsis edilmez. Ancak aşağıdakiler tahsis edilir:

  • Listeler, eşlemeler vb. gibi dinamik veri yapıları;

  • İşlevler, sınıflar ve nesne örnekleri;

  • içe aktarmalar; ve

  • Genel değişkenlerin ilk kez atanması (genel sözlükte yuvayı oluşturmak için).

Optimizasyona daha kullanıcı odaklı bir bakış açısıyla ilgili ayrıntılı bir tartışma için MicroPython hızını en üst düzeye çıkarma bölümüne bakın.