µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

La mémoire sur DS et µLua...
Aller à la page: 1, 2  >
 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide
Sujet précédent :: Sujet suivant  
Auteur Message
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Ven 20 Avr 2012 - 19:04    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Bonjour,


Voilà, je teste assez souvent des petits bouts de codes sur ma DS, et j'oublie assez souvent de supprimer les variables à la fin du programme...


Le problème, c'est que j'ai l'impression de me retrouver face à des erreurs dues à un manque de mémoire de plus en plus nombreuses, d'où ma question : Les variables qui ne sont pas supprimées dans un programme sont-elles effacées plus tard, automatiquement, ou bien stagnent elles sur la ds? 
Et si elles stagnent, y-a-t-il un moyen de les effacer ? 
Parce que j'ai aperçu la fonction garbagecollect, mais je ne suis pas certain de son utilisation et de son utilité...


Merci d'avance,


StolenSoul 


Revenir en haut
Publicité






MessagePosté le: Ven 20 Avr 2012 - 19:04    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
thermo_nono
Modérateur

Hors ligne

Inscrit le: 31 Déc 2008
Messages: 2 415
Localisation: La Géhenne

MessagePosté le: Ven 20 Avr 2012 - 19:40    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

En effet, si tu ne vide pas chaque variable utilisée de la mémoire (et ça m'arrive aussi plus souvent qu'à mon tour), ça reste dans la RAM jusqu'à l'extinction de la console. C'est pour cela que j'avais proposé (après une remarque pertinente de Lolman) de lancer les scripts dans un bloc et de considérer toutes les variables créées dans un script comme locales (d'ailleurs si je me souviens bien et étant donné qu'il faut rendre à César ce qui appartient à César, je crois que toute la proposition avait été faite par Lolman et je n'avais fait que répéter  Razz  ). 
Pour ce qui est du Collect Garbage, je vais laisser ceux qui connaissent bien le truc te répondre car j'ai aussi du mal à bien l'assimiler... 


EDIT : sans compter que lorsqu'on utilise des formules toutes faites comme par exemple : 
Code:
for i,v in ipairs(t) do body end 



il faut bien supprimer la variable "i" que l'on a mis presque sans y penser (en tous cas c'est mon cas Mr. Green ). 
_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Revenir en haut
Visiter le site web du posteur MSN
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Ven 20 Avr 2012 - 20:14    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

garbagecollect() va récupérer l'espace dans la mémoire anciennement occupé par des variables qui ne sont plus utilisées. Ensuite je ne connais pas exactement son comportement.

Ça m'étonne qu'il faille aussi delete les variable des boucles for, je pensais qu'elles étaient toujours locales.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Ven 20 Avr 2012 - 20:38    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Merci pour vos réponses.


Donc en éteignant la console, on libère totalement l'espace occupé? Il ne reste pas de "morceaux" de variables ou autres qui restent à occuper la console?
Pour ce qui est des boucles je ne le savais absolument pas ^^


Et cette fonction peut s'utiliser n'importe quand, même dans un programme totalement différent?


Cordialement,
StolenSoul


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Ven 20 Avr 2012 - 21:04    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Non mais en éteignant la console la RAM n'est plus alimentée, forcément qu'il ne reste plus rien xD

Oui, dans tous les scripts Lua je pense. Encore une fois je ne sais pas exactement comment elle se comporte :-/
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Ven 20 Avr 2012 - 21:07    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

D'accord, je m'étais dit qu'il était possible qu'elles réussissent à persister malgré ça en fait^^


Ok...Il n'y a plus qu'a tester Smile


Enfin, merci encore.


StolenSoul


Revenir en haut
Lolman
Modérateur

Hors ligne

Inscrit le: 02 Aoû 2011
Messages: 811

MessagePosté le: Ven 20 Avr 2012 - 21:34    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

"Lolman", "César" : merci Thermo, la comparaison me flatte. Cet homme et moi avons beaucoup en commun, y compris l'âge.
Je crois que les garbage collectors fonctionnent ainsi : ils suppriment toutes les données en mémoire sur lesquels plus aucune variable ne pointe. En effet, en Lua, les variables ne "contiennent" pas directement les données, mais simplement leur adresse mémoire. Ce sont donc des pointeurs C.
Code:
aVar = 3
aVar = nil
--ici, 3 n'est plus utilisé, mais existe toujours, et le garbage collector s'en débarrassera à son prochain passage.

Code:
aVar = 3
anotherVar = aVar --les deux variables pointent vers la même donnée
aVar = nil
--la donnée du début existe toujours, elle est pointée par "anotherVar", et ne sera donc pas supprimée
anotherVar = nil
--maintenant, plus personne ne veut de la donnée et elle sera jetée aux orties

_________________
http://bit.ly/u5x6DZ Fangame et suite du célèbre Metroid Prime 3.
Corvées : header fofo, Homebreware, µPy, new µLib, modes d'emploi, MLS sur DeSmuME, rotation écran, tuto wiki, domination de la Galak-sy.


Revenir en haut
Visiter le site web du posteur
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Sam 21 Avr 2012 - 00:30    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Ouais, enfin là il faut clarifier un truc : selon ce que tu dis, ça voudrait dire que si on a ce code
Code:
var1 = 3
var2 = var1 -- var1 et var2 pointent vers la même case mémoire
var2 = 4

La dernière ligne met "4" au lieu de "3" dans la case mémoire var2, or selon ce que tu dis c'est aussi celle de var1, pourtant var1 vaudra toujours 3.

Tu as plutôt décrit les tables de Lua, car là en effet, ça se comporte comme des pointeurs, de sorte qu'avec
Code:
var1 = {3}
var2 = var1 -- var1 et var2 pointent vers la même case mémoire
var2 = {4}

On a var1 qui vaut aussi {4}.

Pour les types de variables "classiques", ça se comporte "normalement".

Sinon ce qu'a dit Lolman sur le principe du garbage collector est correct Wink
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Lolman
Modérateur

Hors ligne

Inscrit le: 02 Aoû 2011
Messages: 811

MessagePosté le: Sam 21 Avr 2012 - 07:54    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Ah, donc var2 = var1 entraîne une copie si la donnée n'est pas une table. Je me demande pourquoi c'est le cas pour ces types primitifs.
_________________
http://bit.ly/u5x6DZ Fangame et suite du célèbre Metroid Prime 3.
Corvées : header fofo, Homebreware, µPy, new µLib, modes d'emploi, MLS sur DeSmuME, rotation écran, tuto wiki, domination de la Galak-sy.


Revenir en haut
Visiter le site web du posteur
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Sam 21 Avr 2012 - 13:00    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

La question est plutôt dans ce sens : pourquoi ne copie-t-on pas des tables de cette manière ?
Et là, la réponse est simple : parce que les tables servent à tout faire, et on peut supposer qu'il était plus intéressant de les considérer comme des pointeurs plutôt que comme des variables simples.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Lolman
Modérateur

Hors ligne

Inscrit le: 02 Aoû 2011
Messages: 811

MessagePosté le: Sam 21 Avr 2012 - 19:12    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Je suis intéressé par la question dans l'autre sens x).
En Python, il me semble que toutes les variables sont des pointeurs, et que, pour copier, il faut passer une variable dans un constructeur de copie.
Code:
var = "hello"
var2 = var
var3 = String(var)
var = "lulz"
print(var)
#"lulz"
print(var2)
#"lulz"
print(var3)
#"hello"


Du coup, avec Lua, il est impossible de faire des pointeurs sans passer par des userdata pour les types primitifs, c'est ça ?
_________________
http://bit.ly/u5x6DZ Fangame et suite du célèbre Metroid Prime 3.
Corvées : header fofo, Homebreware, µPy, new µLib, modes d'emploi, MLS sur DeSmuME, rotation écran, tuto wiki, domination de la Galak-sy.


Revenir en haut
Visiter le site web du posteur
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Sam 21 Avr 2012 - 21:14    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Je suppose. Mais je vois pas pourquoi on aurait besoin de pointeurs en Lua ^^
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Fantasix
Modérateur

Hors ligne

Inscrit le: 26 Avr 2010
Messages: 1 317
Localisation: SCREEN_UP, en -1, -1

MessagePosté le: Dim 22 Avr 2012 - 00:48    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

J'avoue que c'est pratique de pouvoir balader / cloner les tableaux à volonté *o*

Les variables "simples" j'en vois pas encore l'utilité pour l'instant. Par contre c'est vrai que du coup, pour copier un tableau, faut passer par une petite boucle For :p

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Dernière édition par Fantasix le Dim 22 Avr 2012 - 02:19; édité 1 fois
Revenir en haut
Visiter le site web du posteur
thermo_nono
Modérateur

Hors ligne

Inscrit le: 31 Déc 2008
Messages: 2 415
Localisation: La Géhenne

MessagePosté le: Dim 22 Avr 2012 - 01:53    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

ben justement, cette boucle for... elle pourrait ressembler à ça ?



 
Code:
function clonearray(table)
   local clonetable = {}
   for k, v in pairs(table) do
      clonetable[k]=String(table[v])

   end
   return clonetable
end


 

_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Revenir en haut
Visiter le site web du posteur MSN
Fantasix
Modérateur

Hors ligne

Inscrit le: 26 Avr 2010
Messages: 1 317
Localisation: SCREEN_UP, en -1, -1

MessagePosté le: Dim 22 Avr 2012 - 02:19    Sujet du message: La mémoire sur DS et µLua... Répondre en citant

Exactement Thermo' !

On a la même, pas une ligne de plus, pas une ligne de moins !

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Revenir en haut
Visiter le site web du posteur
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:49    Sujet du message: La mémoire sur DS et µLua...

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2  >
Page 1 sur 2

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com