π
<-

MemoryError

MemoryError

Message non lude XanderLeaDaren » 05 Fév 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)
Avatar de l’utilisateur
XanderLeaDaren
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 24%
 
Messages: 11
Inscription: 26 Nov 2024, 19:07
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Enseignant
GitHub: XanderLeaDaren

Re: MemoryError

Message non lude critor » 05 Fév 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
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 53.7%
 
Messages: 42421
Images: 17170
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: MemoryError

Message non lude cent20 » 07 Fév 2025, 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 Maths & NSI : Projets, tutos & ressources NumWorks.
📙 Mes 3 livres : Apprendre avec l'IA | Découvrir la NumWorks | Discovering the NumWorks.
Soutenez l'évolution de la NumWorks (un 👍 suffit) : #2292 & #1680.
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 51.4%
 
Messages: 1128
Images: 67
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: MemoryError

Message non lude XanderLeaDaren » 07 Fév 2025, 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.
Avatar de l’utilisateur
XanderLeaDaren
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 24%
 
Messages: 11
Inscription: 26 Nov 2024, 19:07
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Enseignant
GitHub: XanderLeaDaren

Re: MemoryError

Message non lude cent20 » 07 Fév 2025, 17:39

XanderLeaDaren a écrit: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 Maths & NSI : Projets, tutos & ressources NumWorks.
📙 Mes 3 livres : Apprendre avec l'IA | Découvrir la NumWorks | Discovering the NumWorks.
Soutenez l'évolution de la NumWorks (un 👍 suffit) : #2292 & #1680.
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 51.4%
 
Messages: 1128
Images: 67
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz


Retourner vers Programmation Python

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
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 !
1234
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2495 utilisateurs:
>2479 invités
>9 membres
>7 robots
Record simultané (sur 6 mois):
29271 utilisateurs (le 11/07/2025)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)