Salut,
Je me demandais si il fallait mieux utiliser des variables locales ou globales.
Quelles sont leurs diffences (taille memoire, vitesse, etc ??
Merci.
Salut,
Je me demandais si il fallait mieux utiliser des variables locales ou globales.
Quelles sont leurs diffences (taille memoire, vitesse, etc ??
Merci.
In code we trust !!
Il y a plusieurs differences entre les variables locales et globales.
De maniere general, il vaut mieux utiliser des variables locales si tu le peux.
Si tu cre 2 fonctions, elles peuvent avoir les memes variables locales (meme noms). Car si 2 fonctions utilisent les meme variables globales, et que l'une appele l'autre, la variable globale vas etre modifiee et lorsque la premiere fonction vas continuer son execution, elle risque de planter car sa variable aura ete modifiee...
De plus, les variables locales sont detruites a la fin de la fonction, ce qui economise la memoire. Les variables globales sont alouees pour toute la duree de l'application.
Si tu utilise un tres grand tableau de maniere tres frequent, il vaut alors mieux le mettre en variable globale, ca evite de faire des allocations/desallocations de mamoires trop frequament.
Mais en regle general, il ne faut pas utiliser les variables globales lorsque ca n'est pas oblige.
Pour te perfectionner en langage C, voir les tutoriels et cours de C : http://c.developpez.com/cours/
Bob, Rédacteur C/C++ & PHP
http://bob.developpez.com/
Le mieux étant de n'utilise aucune variable globale ... mais c'est assez utopique. Ca devient vite le bordel si il y a trop de variables globales. Disons qu'il ne faut passer en global que les variables utilisées dans de très nombreuses fonctions.
Dans ma calculatrice, j'ai quelques variables globales :
- Liste des variables, fonctions, constantes, etc.
- Indicateur pour dire si une allocation de mémoire est locale (juste pour un calcul) ou global (principalement dans les listes) -> C'est pour tester les fuites de mémoire
Pour charger un fichier de configuration .INI par exemple, je crée une classe (je programme en C++) qui contient des variables dont j'ai besoin uniquement pour ke chargement du fichier, je charge le fichier, puis je détruit la classe.
Après ça, tu t'arranges comme tu veux ... tant que le code reste compréhensible :D
@+ Haypo
surtout ne jamais décrire des variables dans des fichiers .h
car tout le monde y a accès et tout le monde peut les modifier
A mon avis, dans le cas d'utilisation de variables globales un peu nombreuses, le mieux est de les regroupper par themes dans des structures. Ca clarifie enormement le programme, ainsi que sa comprehension. De plus, la manipulation est plus facile.
Par ex, je cree ds mes programme un structure OPTIONS qui contient toutes les options qui doivent ete accessibles de l'ensemble du programme.
Bob, Rédacteur C/C++ & PHP
http://bob.developpez.com/
Pour mettre des variables dans les .h, faut rajouter "extern", ex:
liste.h
liste.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ... typedef Element *Liste; extern Liste MaListe; ...
Comme ça tout le monde peut accéder à la liste, mais il n'y en a qu'une physiquement (sinon chaque fois que tu inclus ton .h tu auras une nouvelle variable MaListe, gros problème au linkage).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... Liste MaListe; ...
Bon, bien sûr, c'est un variable globale, faut en juger l'utilité : pourquoi pas plutôt une local ...
@+ Haypo
On peut aussi regrouper les variables dans des espaces de noms, et non des structures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 namespace Variables_globales { int Ma_variable; } Variables_globales::Ma_variable = 0;
Une question concernant C++Builder ? Voici la réponse
Consultez aussi les tutoriels de qualité de la section C/C++
Salut,
Je voulais préciser qu'une différence IMPORTANTE entre les variables locale et les variables locales est qu'elles sont gérées de manière complètement différente par le compilateur
Les variables locales sont mises sur la pile alors que les variables globales sont mises sur le tas. Il peut donc être intéressant d'utiliser des variables globales quand tu as beaucoup de variables et que tu risques le dépassement de pile. Tu remarqueras que les variables locales auxquelles on attribue une valeur directement int i=2; sont elles aussi mises sur le tas, c'est toujours ça de pris.
Toutefois, ce problème est moins crucial que dans d'autres langages (VB où le type variant favorise le remplissage rapide de la pile ;-))
Voila
Ol'
Désolé les var globales ne sont mises sur le tas qu'en cas d'allocation mémoire.
Sinon elles sont mises dans 2 sections de données :
l'une pour les var non initialisées
l'autre pour les var initialisées
Attention, certaines methodes proposées relevent du C++ et non du C
c'est le cas du namespace a moins qu'il ne soit dans la norme C99...
C'est aussi le cas de ce dont parle haypo : le extern n'est pas indispensable en C, chaque déclaration étant un essai de déclaration, il l'est par contre en C++. Si on utilise la technique du extern, il doit y avoir au moins une déclaration sans le extern.
Les variables locales sont toujours mises sur la pile, meme quand elle sont initialisées. Par contre une "locale" static, est en fait une globale, et dans donc gérée comme telle.
Effectivement les globales ne sont pas sur le tas, qui est resevé normalement à l'allocation dynamique, mais comme le tas elles ont une durée de vie qui est la meme que celle du programme contrairement aux variables locales.
Merci pour toutes ces infos
In code we trust !!
Désolé de mon ignorance mais c'est quoi une variable sur le tas??
autodidacte sans diplôme et fier de l'être
http://www.leslangagesweb.fr.st
cabossdur: rayannos@aol.com
Euh... les variables de tas ne sont jamais détruites, contrairement aux globales qui le sont à la fin du programme.Envoyé par Gandalf
Nuance subtile, mais très importante.
cabossdur:Le tas, c'est la zone mémoire où ont lieu les allocations faites par malloc ou new.
Ces allocations/variables ne sont libérées/détruites qu'avec free ou delete.
Bien sûr, la mémoire est quand même libérée quand l'executable quitte, mais alors c'est sauvage.
"J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
www.stroustrup.com
Voilà une réponse claire, nette et précise comme je les aime.
Merci beaucoup à toi
autodidacte sans diplôme et fier de l'être
http://www.leslangagesweb.fr.st
cabossdur: rayannos@aol.com
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager