La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.

Présentations similaires


Présentation au sujet: "Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction."— Transcription de la présentation:

1

2

3 Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.

4 Le nom « classe dallocation » na aucun rapport avec la notion de classe de la programmation objet. Petite remarque C++

5 Quest-ce que la portée dune variable ? Toute variable en C est soit locale ou externe (globale). Une variable possède une visibilité externe si elle est définie à lextérieur dune fonction. Inversement, une variable est dite locale si elle est définie à lintérieur dune fonction.

6 Les variables de visibilité externe Une variable externe possède la même durée de vie que le programme et est toujours définie dans la partie data segment de la mémoire du programme. Une variable externe est visible par toutes les fonctions définies après la variable dans le même fichier que celle-ci. Une variable externe peut être masquée par une variable locale à lintérieur dune fonction. Par défaut, les fonctions sont externes.

7 Les variables de visibilité locale La durée de vie dune variable locale varie selon son emplacement en mémoire. Une variable locale peut être allouée à trois endroits : les registres de lUCT, la pile ou le data segment. Le programmeur doit lui-même spécifier le lieu dallocation de la variable. Une variable locale nest visible que dans linstruction composée (bloc) où elle a été définie.

8 Résumé des choix demplacement Variable Externe Locale Permanente (data segment) Pile (stack) Registres Emplacement en mémoireVisibilité Permanente (data segment)

9 Disposition en mémoire dun programme Mémoire vive de lordinateurRegistres de lUCT Mémoire allouée au programme Data segment Code segment Stack (pile dexécution) Heap (entrepôt à octets) Contient les variables externes et les chaînes de caractères littérales Conserve les instructions du programme (en lecture seule) Empile les appels de fonctions et les variables locales Endroit où seffectuent les allocations programmées de mémoire Conserve les données accessibles très rapidement

10 Les 4 classes dallocation du C auto : Classe dune variable locale placée dans la pile (stack). register : Classe dune variable locale placée dans un registre de lUCT. static : Classe dune variable locale ou externe placée dans le data segment. extern : Classe associée à toute variable de visibilité externe.

11 La classe dallocation auto Classe dallocation par défaut des variables locales et des paramètres dune fonction. Une variable auto est allouée dans la pile. Une variable auto vit aussi longtemps que linstruction composée où elle à été définie. Exemple : void exemple(void) { auto int i; /* Le mot auto est facultatif, puisque cest la classe dallocation par défaut. */... }

12 La classe dallocation register Exprime le souhait de placer une variable ou un paramètre dans un registre de lUCT. Une variable register vit aussi longtemps que linstruction composée où elle à été définie. Il est impossible dappliquer lopérateur & sur une variable de la classe dallocation register. Cette classe est désuète en raison de la capacité doptimisation des compilateurs. Exemple : void exemple(void) { register int i;... }

13 Classe dallocation static Une variable static est toujours allouée dans le data segment dès le départ du programme. Si elle nest pas initialisée, le compilateur lui assigne la valeur 0. Une variable static possède la même durée de vie que le programme. Un paramètre dune fonction ne peut pas appartenir à cette classe. Une variable de la classe dallocation static conserve son contenu entre les appels de linstruction composée où elle est définie.

14 Exemple dutilisation de la classe dallocation static Une variable static peut servir entre autres à : Connaître le nombre de fois quune fonction a été appelée (et par le fait même si cest la première fois) ; Se souvenir dun calcul effectué précédemment. Exemple : void exemple(void) { static int indice_appel = 0; ++indice_appel; printf (« Cette fonction a été appelée %d » « fois.\n », indice_appel); }

15 Variables externes et fonctions de la classe dallocation static Le mot static permet de rendre confidentielle au fichier où elle est définie une fonction ou une variable externe. Lorsquune fonction ou une variable est confidentielle, léditeur de lien narrive pas à la trouver. Elle devient donc inutilisable à lextérieur du fichier où elle est définie. On prendra lhabitude de toujours préfixer de static les variable externes et les fonctions dissimulées dans le.C dune librairie.

16 La classe dallocation extern Une variable extern est toujours allouée dans le data segment dès le départ du programme. Si elle nest pas initialisée, le compilateur lui assigne la valeur 0. Une variable extern possède la même durée de vie que le programme. Cest la classe dallocation par défaut des variables externes et des fonctions, ce qui est logique puisque la définition dune fonction ne peut être que de niveau 0. Un paramètre ne peut pas appartenir à la classe dallocation extern.

17 Exemple dutilisation de la classe dallocation extern Sans quon le demande, tout système fournit des variables globales. Par exemple, errno et sys_errlist qui contiennent respectivement la valeur entière de la dernière erreur détectée et un accès au tableau des messages derreurs du système. Pour les utiliser, il suffit d ajouter ceci à un programme : extern int errno; extern char* sys_errlist[];

18 Et où vont les malloc ? Les allocations programmées (effectués à laide dun malloc par exemple) seffectuent dans lentrepôt à octets (heap). Elles nont pas de classe dallocation et ne se libèrent quà la fin du programme ou encore lorsque le programmeur le demande.

19 Résumé VARIABLE VISIBILITÉ :LOCALEEXTERNE EMPLACEMENT :REGISTRE (register) PILE (auto) PERMANENTE (static) PERMANENTE (extern)

20 Pour plus dinformations, consultez Philippe Drix, Le langage C ANSI 3 ème édition, chapitre IX Merci au Service des Enseignements Généraux et à Hugues Saulnier FIN


Télécharger ppt "Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction."

Présentations similaires


Annonces Google