Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
Magus Membre a fort taux de post
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
|
Posté le: 02/10/09 16:26 Sujet du message: |
|
|
Alors pour commencer, non les paramètres d'une fonction ne leakent pas. Ils ne doivent pas être nullifiés.
Ensuite, il n'y a pas tous les types de variables qui leakent. Les entiers, les réels, les strings et les booléens ne leakent pas et il est donc inutile de les nullifier. _________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi. |
|
Revenir en haut |
|
|
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
Posté le: 02/10/09 16:29 Sujet du message: |
|
|
Mhh ok, et donc c'est quel type de variable qui leak ? _________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain » |
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 02/10/09 16:34 Sujet du message: |
|
|
Y'a aucun leak dans tes exemples ?
Il faut juste se soucier de tous les types natifs d'handle (extends handle).
Bref de mémoire tout sauf "integer",'"real","string","boolean".
Y'a des exceptions, du genre tu peux te lever tôt pour avoir un leak sur un joueur, étant qu'un joueur ca ne se détruit pas autrement qu'IRL à coups de piolets.
Y'a aussi le cas des textag qui sont naturellement recyclés et surement d'autres cas.
Mais pour faire simple ne retient pas les exceptions.
En théorie une variable locale déclarés dans une fonction (takes ...) n'a pas besoin d'être nullifiée, ca serait fait automatiquement à la fin de la fonction.
Pour que war3 puisse recycler les index d'handle (en gros l'adresse des handle), il faut nullifier la variable qui pointait sur cet handle. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
Posté le: 02/10/09 16:53 Sujet du message: |
|
|
Okay, mirci ! _________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain » |
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 02/10/09 17:15 Sujet du message: |
|
|
Sinon pour les conditions étant donné qu'il n'existe pas de TriggerSleepCondition tu peux utiliser une variable globale à la place. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Bantas Anomalie floodiforme
Inscrit le: 21 Aoû 2007 Messages: 1524 Sujets: 37
Médailles: 1 (En savoir plus...)
|
Posté le: 02/10/09 19:32 Sujet du message: |
|
|
Les leaks de handles locaux sont systématiques ou uniquement quand on détruit l'objet ?
Ah et aussi : Si je prends un handle (de type handle et pas un type héritier) il leak pas lui, si ? _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 02/10/09 19:41 Sujet du message: |
|
|
Bantas a écrit: | Les leaks de handles locaux sont systématiques ou uniquement quand on détruit l'objet ? |
Uniquement si l'objet est détruit (ultérieurement oupa).
Citation: | Ah et aussi : Si je prends un handle (de type handle et pas un type héritier) il leak pas lui, si ? |
Si, bien sûr il leak. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
jk2pach Invité
|
Posté le: 03/10/09 14:39 Sujet du message: |
|
|
Il faut nullifier les variables globales quand on s'en sert fréquement ou pas?
Genre toutes les fonctions de dégâts de groupe etc... (Avec une variable unité globale pour l'infligeur de dégâts par exemple)
(Désolé Rom, je me pose encore aussi ce genre de questions :p) _________________
|
|
Revenir en haut |
|
|
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
Posté le: 04/10/09 12:25 Sujet du message: |
|
|
Another kession
Déjà je voudrais savoir, quand on utilise (par exemple) SetTimerData (de TimerUtils), le timer aura pour valeur accrochée la structure et ses valeurs, ou bien un pointeur vers cette structure ?
Ensuite, est-ce que quand on destroy() une structure, est-ce qu'il faut quand même nullifier les variables ?
Jass: | library lib initializer Init
struct my_struct
integer i = 0
sound s = null
timer tim = null
method Method_1 takes nothing returns nothing
set .s = CreateSound("aaaaaaaaaaaa", false, true, false, 5, 10,"")
set .i = 1
endmethod
method Method_2 takes nothing returns nothing
call .destroy()
endmethod
static method TimerCallBack takes nothing returns nothing
if thistype(GetTimerData(GetExpiredTimer())).i == 0 then
call thistype(GetTimerData(GetExpiredTimer())).Method_1()
else
call thistype(GetTimerData(GetExpiredTimer())).Method_2()
endif
endmethod
endstruct
private function Init takes nothing returns nothing
local my_struct data = my_struct.create()
set data.tim = NewTimer()
call SetTimerData(data.tim, data)
call TimerStart(data.tim, 1, false, function my_struct.TimerCallBack)
endfunction
endlibrary |
Est-ce que ici avant .destroy() je dois faire :
set s = null
set tim = null
Merci _________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain » |
|
Revenir en haut |
|
|
jk2pach Invité
|
Posté le: 04/10/09 12:28 Sujet du message: |
|
|
1-Aucune idée
2-Pas besoin, puisque les valeurs de ta structure seront remplacées pendant l'utilisation suivante. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 04/10/09 12:51 Sujet du message: |
|
|
Mais omg comment vous le dire ...
Ca ne leak uniquement que si l'handle référencé par la variable est détruit, dans ce cas il faut nullifier la variable.
Dans le cas d'une variable locale il faut impérativement la nullifier car en dehors de la fonction on n'y a plus accès, et l'id de l'handle n'est pas recyclé quand l'handle associé est détruit.
Ce qui a pour conséquence que l'allocation d'handle devient de plus en plus lent, et peut aussi rendre défaillant des codes utilisant la méthode d'attachement (GetHandleId(<handle>) - OFFSET).
Dans le cas d'une variable globale c'est beaucoup moins important de le faire, car normalement elle devrait être réutilisée, et donc l'id de l'handle devrait être recyclée tôt ou tard.
Mais dans ce cas il existe un leak (très) mineur :
http://www.thehelper.net/forums/showthread.php?t=136608
Il est donc de bonne habitude de nullifier les variables quand l'handle associé est détruit.
Pour le cas des structs, globalement une struct c'est "juste" une collection de variable globales array.
Et une instance de struct est juste un entier, l'index de ces variables globales array.
Il n'est pas évident qu'une instance de struct sera réutilisée.
Par ex à un moment clef du jeu on peut avoir besoin de 100 instances, puis par la suite pas plus de 10.
Si la struct contient des handle qui ont été détruit on a 90 leak potentiels ...
Pour automatiser la chose il suffit de déclarer une method nommée "onDestroy" dans lequel on nullifie toutes les variables handle, cette fonction sera automatiquement appelée quand on détruira l'instance de struct avec .destroy()
PS :
Romm tu leak d'un son, tu ne le détruit pas. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 04/10/09 13:44 Sujet du message: |
|
|
Citation: | La méthode onDestroy doit être statique j'imagine ? |
Tu imagines mal. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Rommstein60 MODÉRATEUR À LA RETRAITE
Inscrit le: 23 Aoû 2007 Messages: 4766 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
|
Posté le: 04/10/09 14:12 Sujet du message: |
|
|
:'( _________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain » |
|
Revenir en haut |
|
|
|