Bonjour !
Alors voilà, j'utilise des variables globales pour l'affichage d'une fenêtre, globales car ces variables apparaissent dans OpenWindow(), dans la callback et d'autres procédures destinées uniquement à l'affichage de cette fenêtre.
Le problème, c'est que quand l'utilisateur passe à la fenêtre suivante, l'ancienne se ferme et ces variables ne sont plus utiles.
J'aurais donc voulu désallouer la mémoire prise par elles, par un espèce de :
mavariable.l = 0
(...)
freememory(@mavariable, 4)
J'ai pensé à faire :
*Buffer = allocatememory(nombre de variable * 4) ;pour des longs
et peekL/pokeL(*Buffer +(variableindex*4))
et ensuite je peux faire freememory, mais bon c'est ..lourd!
Alors peut-on faire ?!?
"Décharger" des variables
Flastick,
comme le dis bien djes, c'est tout à ton honneur de t'en faire pour si peu.
Il faut regarder 2 choses, la variable et son contenu (par analogie la boîte aux lettres et le courrier qu'elle contient).
Les variables globales sont stockées dans le fichier lui-même dans une section ou on peut lire/écrire. Tu ne pourras pas "faire de la place" en essayant de les supprimer.
Par exemple, si tu as 3 variables globales de type long, elles occuperont 12 octets dans le fichier c'est-à-dire en mémoire lorsque celui-ci sera chargé par le système, quelque soient leurs contenus, quelles soient ou non utilisées. Le cas particulier du contenu pour une chaîne n'est pas gênant car l'allocation de la mémoire est faite par PB au moment du besoin (on met un contenu ou on le change).
Ton soucis est la sous-utilisation de ces variables, tu peux essayer de les réutiliser lorsque tu crée une autre fenêtre mais tu dois gérer le fait qu'elles soient "libres". Mais même si tu utilises beaucoup de variables globales (200 ou 300) cela représente peu de mémoire, ce qui consomme de la mémoire c'est par exemple les icones/images en datasection etc.
Par contre, les variables locales ne "durent" que lorsque la procedure est en cours d'utilisation (avant de la quitter avec un Endprocedure ou Procedurereturn). Elles sont allouées sur la pile qui est une zone mémoire dédiée à l'application. Dès que la procedure se termine, les zones seront réécrites par d'autres opérations d'écriture sur la pile et ne seront plus accessibles en dehors de la proccédure (sauf à manipuler les adresses de la pile mais le contenu risque de changer très vite).
A+
Denis
comme le dis bien djes, c'est tout à ton honneur de t'en faire pour si peu.
Il faut regarder 2 choses, la variable et son contenu (par analogie la boîte aux lettres et le courrier qu'elle contient).
Les variables globales sont stockées dans le fichier lui-même dans une section ou on peut lire/écrire. Tu ne pourras pas "faire de la place" en essayant de les supprimer.
Par exemple, si tu as 3 variables globales de type long, elles occuperont 12 octets dans le fichier c'est-à-dire en mémoire lorsque celui-ci sera chargé par le système, quelque soient leurs contenus, quelles soient ou non utilisées. Le cas particulier du contenu pour une chaîne n'est pas gênant car l'allocation de la mémoire est faite par PB au moment du besoin (on met un contenu ou on le change).
Ton soucis est la sous-utilisation de ces variables, tu peux essayer de les réutiliser lorsque tu crée une autre fenêtre mais tu dois gérer le fait qu'elles soient "libres". Mais même si tu utilises beaucoup de variables globales (200 ou 300) cela représente peu de mémoire, ce qui consomme de la mémoire c'est par exemple les icones/images en datasection etc.
Par contre, les variables locales ne "durent" que lorsque la procedure est en cours d'utilisation (avant de la quitter avec un Endprocedure ou Procedurereturn). Elles sont allouées sur la pile qui est une zone mémoire dédiée à l'application. Dès que la procedure se termine, les zones seront réécrites par d'autres opérations d'écriture sur la pile et ne seront plus accessibles en dehors de la proccédure (sauf à manipuler les adresses de la pile mais le contenu risque de changer très vite).
A+
Denis