"Décharger" des variables

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Flastick
Messages : 21
Inscription : mer. 06/févr./2008 1:02

"Décharger" des variables

Message par Flastick »

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 ?!?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

C'est tout à ton honneur de t'en faire pour si peu (rare de nos jours! Tu as vu que la démo de crysis prenait 1.7Go?); sinon tu peux utiliser une liste chaînée.
Flastick
Messages : 21
Inscription : mer. 06/févr./2008 1:02

Message par Flastick »

Non mais j'aime pas le gaspillage, même si il y a assez à disposition ^^ Et c'est plus une question de curiosité qu'autre chose. Ah oui j'avais pas pensé aux listes chaînées !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

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
Flastick
Messages : 21
Inscription : mer. 06/févr./2008 1:02

Message par Flastick »

Ahaa ok j'ai mieux compris! en fait elles sont allouées dès que windows charge les programme en mémoire! bon ok je ne m'en fais pas alors :) Merci pour vos réponses !!!
Répondre