π
<-

MemoryError

MemoryError

Unread postby XanderLeaDaren » 05 Feb 2025, 12:12

Bonjour à tout le monde,

je continue le développement du script Python nous permettant d’avoir une interface NPİ / RPN graphique sous NumWorks (cf. ce sujet) et je tombe ce matin sur :

Last command
MemoryError:


Questions en vrac :
– s’agit-il de la taille du script, ou de l’espace mémoire nécessaire pour le faire tourner, qui est trop demandeur ?
– que puis-je faire pour réduire ce problème : optimiser les espaces/retours à la ligne/etc. ou optimiser le nombre de variables utilisées ?
– avez-vous des conseils pour cette optimisation ?
– éventuellement, si rien n’est franchement possible de faire pour améliorer l’ensemble, les intéressés par le script peuvent me faire savoir ce qui semble vraiment indispensable, ce qui peut être retiré, et voire même ce qui vous intéresserait dans les idées de développement que j’avais prévues, mais que je devrai laisser tomber ? (cf. issues sur GitHub de développement)
User avatar
XanderLeaDaren
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 8%
 
Posts: 9
Joined: 26 Nov 2024, 19:07
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Enseignant
GitHub: XanderLeaDaren

Re: MemoryError

Unread postby critor » 05 Feb 2025, 12:47

Bonjour.


Si l'erreur se produit à l'exécution, c'est l'espace mémoire (le heap / tas) qui vient à manquer.

Le heap a une capacité dans les 64K sur le firmware officiel Epsilon.

Il faut optimiser : utiliser moins de variables, changer pour des types de variables moins gourmands en espace mémoire, stocker les données de façon plus optimale, etc.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.4%
 
Posts: 42146
Images: 16490
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: MemoryError

Unread postby cent20 » Today, 08:43

Xavier ne l'ayant pas précisé mais me l'ayant expliqué sur des projets antérieur, je rajouterais que les objets qui changent de taille (manipulations sur les listes, .insert, .append) peuvent déclencher l'erreur quand on se rapproche de la taille limite.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 49.2%
 
Posts: 1079
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Re: MemoryError

Unread postby XanderLeaDaren » Today, 14:12

Merci à tous les deux.

J’ai un peu épuré le code pour retirer des constantes, et des affectations à des variables de type string, gourmandes en mémoire, et j’ai remplacé quelques listes par des tuples là où c’était possible : typiquement du texte pour les menus, et j’arrive maintenant à pouvoir rajouter quelques fonctionnalités.

Par hasard, vous savez si charger le module ion en entier, avec toutes les constantes correspondants aux numéros des touches du clavier, est quelque chose qui surcharge la mémoire heap ? J’envisage de mettre des simples nombres dans les appels à keydown, si c’est le cas.
User avatar
XanderLeaDaren
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 8%
 
Posts: 9
Joined: 26 Nov 2024, 19:07
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Enseignant
GitHub: XanderLeaDaren

Re: MemoryError

Unread postby cent20 » Today, 17:39

XanderLeaDaren wrote:Merci à tous les deux.

J’ai un peu épuré le code pour retirer des constantes, et des affectations à des variables de type string, gourmandes en mémoire, et j’ai remplacé quelques listes par des tuples là où c’était possible : typiquement du texte pour les menus, et j’arrive maintenant à pouvoir rajouter quelques fonctionnalités.

Par hasard, vous savez si charger le module ion en entier, avec toutes les constantes correspondants aux numéros des touches du clavier, est quelque chose qui surcharge la mémoire heap ? J’envisage de mettre des simples nombres dans les appels à keydown, si c’est le cas.


Tout objet crée consomme de la mémoire. Tout est une question de compromis.
Une fonction lourde, longue, avec plein de paramètres va consommer plus qu'une fonction minimaliste. Parfois il est préférable d'avoir deux petites fonctions qu'une très grosse, mais si elle sont toutes les deux en mémoire ça consomme davantage.
Pour éviter les problèmes de mémoire je demande à mes élèves de :
- Ne pas utiliser de récursivité
- De faire des fonctions courtes, monotaches
- De vérifier qu'il n'y a pas des appels récursifs indirects
- De ne pas utiliser de POO, source de friction avec le collègue qui ne jure que par ça (mais quand ça plante c'est bibi qu'on vient voir, et bibi il refuse de corriger si il y a de la POO)
- De ne pas changer des types des objets, de ne pas les faire grossir
- De se limiter à des scripts de 16 Ko
- De ne pas créer de matrice géantes, même si mon dernier jeu utilise une matrice 32x20 et que tout tourne bien.

Bon débogage.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 49.2%
 
Posts: 1079
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz


Return to Programmation Python

Who is online

Users browsing this forum: No registered users and 6 guests

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
734 utilisateurs:
>706 invités
>22 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)