Ces dernières semaines nous t'avons testé et présenté nombre de scripts publiés dans la bibliothèque NumWorks, dont pas mal de fonctions récursives dessinant des fractales.
Par exemple, une fonction factorielle(n) définie récursivement peut échouer à partir de n=9 pour la visualisation en ligne, et n=42 sur la calculatrice. Le premier cas est ridicule, et le deuxième reste problématique.
Devant ces limitations évidentes, une question se pose : mais quelle est donc la capacité de la mémoire de travail offerte par la NumWorks aux scripts Python ?
Mais nous n'avons pas ici de module permettant de récupérer des informations sur le matériel, alors comment faire ?
- Code: Tout sélectionner
def mem():
try:
l = [0]
while True:
try:
l = l + l[l[0]:]
except:
if l[0] < len(l)-1:
l[0] = len(l)-1
else:
print("+", 4*len(l))
l[0] = 4*len(l) + mem()
break
except:
return 0
return l[0]
Ci-contre, on note en effet que l'outil de visualisation en ligne ne dispose que de 6,5Kio de mémoire de travail, avec par ordre décroissant :
- un bloc contigu de 4Kio
- un bloc contigu de 2Kio
- ...
Mais passons à la vraie machine. Cela peut varier légèrement, mais en transférant et appelant notre script juste après un reset nous obtenons effectivement nettement mieux, dans les 13Kio, avec par ordre décroissant :
- deux blocs contigus dans les 4Kio chacun
- un bloc contigu dans les 2Kio
- ...
Aucune liste ne pourra donc à ce jour faire bien plus de 4Kio, et le volume total des données d'un script ne pourra excéder les 13Kio et quelques.
Aussi la capacité offerte à ce jour nous semble assez insuffisante pour permettre le développement de projets de jeux et/ou retouche d'images, conformément à ce que promeuvent les derniers programmes scolaires sortis.
Nous avons donc 17Kio au total dédiés au Python, répartis en :
- 4Kio de mémoire de stockage des scripts
- 13Kio de mémoire de travail pour l'évaluation des scripts
Mais rappelons que la puce STM32F412 de ta NumWorks offre :
- 1 Mio de mémoire Flash
- 256 Kio de mémoire RAM
Lien : https://workshop.numworks.com/python/andreanx/mem