Вы находитесь на странице: 1из 24

Gestion de la mmoire

Gestion de la mmoire

Gestion de la mmoire

1. Qu'est-ce que la mmoire ? - Dfinitions, exemples

2. Allocation contigu en mmoire - Partitions de taille fixe, de taille variable 3. Pagination et mmoire virtuelle

Annexe. La pile : utilisation des arguments passs main.

_______________________________________
ENST BCI Informatique

432 43 2

_______________________________________
ENST BCI Informatique

433 43 3

Gestion de la mmoire

Gestion de la mmoire

Dfinitions - Mmoire : juxtaposition de cellules ou mots-mmoire ou cases-mmoire m bits (Binary digIT). Chaque cellule peut coder 2m informations diffrentes. - Octet (byte) : cellule huit bits. (1 Kilo-octet = 220octets). - Mot : cellule 16, 32, 64 bits. - Temps d'accs la mmoire (principale) : 20 100 ns. Gnralits : Sur une machine classique, rien ne distingue, en mmoire, une instruction d'une donne (architecture Von Neumann). Exemple de protections logicielles : - donnes accessibles en lecture/criture - programme accessible en lecture seule Evolution : -Sur les machines dotes des processeurs les plus rcents, ce type d'architecture est remis en cause. En effet, ces processeurs sont quips de mmoire appeles caches et ces caches sont souvent distincts pour les donnes et les instructions. On parle dans ce cas de Harvard type cache . -Sur certains calculateurs spcialiss (systmes embarqus, processeurs de traitement du signal, ...) les programmes et les donnes sont rangs dans des mmoires diffrentes : programme en ROM (read only memory), donnes en RAM. Pourquoi la mmoire ? Le processeur va chercher les informations dont il a besoin, c'est--dire les instructions et les donnes, dans la mmoire. Il ne va jamais les chercher sur le disque ! Ce dernier sert de support d'archivage aux informations, en effet la mmoire s'efface lorsque on coupe l'alimentation lectrique de la machine. 210octets, 1 Mega-octet =

La mmoire, ressource du S.E


La mmoire est assemblage de cellules repres par leur numro, ou adresse. Gestionnaire de mmoire : gre l'allocation de l'espace mmoire au systme et aux processus utilisateurs.

n = largeur du bus d'adresses m = largeur du bus de donnes

_______________________________________
ENST BCI Informatique

434 43 4

_______________________________________
ENST BCI Informatique

435 43 5

Gestion de la mmoire

Gestion de la mmoire

Adresse d'une information : Chaque information est repre par son adresse, c'est dire le numro de son premier octet. Cet adressage en termes d'octets permet d'adresser, de reprer, en mmoire tous types d'information, quelque soit leur taille. On peut ainsi adresser un simple octet (un char en langage C), un mot sur deux octets (un short en langage C), etc. Types de base en C En langage C, la coutume sur Sun, par exemple, est la suivante : [unsigned] char [unsigned]short [unsigned]int [unsigned]long 8 bits 16 bits un mot machine (32 ou 16 bits !) 32 bits

Adressage de la mmoire
les cellules mmoire sont repres par leur adresse en termes d'octets. Ceci permet d'adresser diffrents types de donnes, en langage C : char, int , long Exemple d'implantation de variables sur une machine mots de 4 octets (les donnes sont implantes partir de l'adresse 2) :
#include <stdlib.h> int j; int j; short k; short k; char c; char c; /***************************** j sur 4 octets -> adresse = 2 k sur 2 octets -> adresse = 6 c sur 1 octet -> adresse = 8 ******************************/ int main(void) { exit(0); }

Voici la rgle : 1 ! sizeof (char) ! sizeof (short) ! sizeof (int) ! sizeof (long) et en C ansi : sizeof (short) " 16 bits

La rgle : 1 ! sizeof (char) ! sizeof (short) ! sizeof (int) ! sizeof (long) ... et en C ANSI : sizeof (short) " 16 bits

_______________________________________
ENST BCI Informatique

436 43 6

_______________________________________
ENST BCI Informatique

437 43 7

Gestion de la mmoire

Gestion de la mmoire

Les adresses des donnes sont alignes sur le mot mmoire. Consquence de l'alignement : la taille d'un tableau de structure, par exemple, n'est pas la mme d'une machine l'autre : struct { int Tab [4]; char c; } Buf [3] ; sizeof (Buf ) = ?

Mmoire : alignement

Consquence de l'accs 32 bits : allocation mmoire d'un tableau de structures sur une machine alignant sur 32 bits (le tableau est implant partir de l'adresse 0x100 :

Plus simplement, mais dans le mme ordre d'ides, pour allouer de la mmoire pour un tableau de 6 int : Ne pas crire : int * Ptr; Ptr = (int *) malloc (6 * 4); Mais crire : int * Ptr; Ptr = (int *) malloc (6 * sizeof int); un int peut tre implant sur 2 ou 4 octets, suivant les machines... Pour allouer de la mmoire pour une structure du type de celle dcrite ci-dessus, il est impratif d'utiliser sizeof, en effet la taille de cette structure ne sera sans doute jamais 5! struct S { char c; int i; } struct S Tab [10];

Ici, sizeof S renvoie la valeur 8 et non pas 5 !

_______________________________________
ENST BCI Informatique

438 43 8

_______________________________________
ENST BCI Informatique

439 43 9

Gestion de la mmoire

Gestion de la mmoire

Utilisation d'une union pour "voir" une zone mmoire de plusieurs faons : int main ( void ){ /*-------------------------------------------------Visualiser sous forme de quatre octets une adresse Internet donne sur un long : 0x89c2a032 --> 137.194.160.50 (scapin) --------------------------------------------------*/ union Adr_IP{ struct { unsigned char o1, o2, o3, o4;} octets; unsigned long entier; }; union Adr_IP Site; /* Site.entier est initialis grce une fonction du type gethostbynane () */ printf ("adr. IP -> %d.%d.%d.%d\n", Site.octets.o1, Site.octets.o2, Site.octets.o3, Site.octets.o4); }

Mmoire et langage C : types drivs

Une union permet de "voir" la mme zone mmoire de faons diffrentes :

union{ char c; short i; float f; }var;

l'union a la taille du plus grand lment qu'elle contient, ici :


sizeof var = sizeof float;

_______________________________________
ENST BCI Informatique

440 44 0

_______________________________________
ENST BCI Informatique

441 44 1

Gestion de la mmoire

Gestion de la mmoire

- Pointeurs et tableaux en C : Tab [i] quivalent *(Tab+ i) - Arithmtique des pointeurs : Attention aux diffrences de pointeurs, elles n'ont de sens que si les pointeurs pointent sur des objets de mme type : $ cat essai.c #include <stdio.h> #include <stdlib.h> short int i = 0; char c = 'a'; short int j = 1; int main (void){ char *pc = &c; short int *p = &i; short int *q = &j; int r; r = p - q ; printf("pc = %x\n", printf("p = %x\n", printf("q = %x\n", printf("r = %d\n", exit (0); } $ gcc -Wall essai.c -o essai $ essai pc = 804963c p = 8049644 q = 804963e r = 3 Diffrence de pointeurs : r = (p-q)/sizeof int !!!!

C et adressage de la mmoire : exemple


Le tableau Tab est implant en 0, que se passe-t-il en mmoire lors de l'excution du programme ci-dessous :
int main (void){ short Tab[4]; short * Ptr1; char * Ptr2; Ptr1 Ptr2 = (short *)Tab; = (char *)Tab;

pc); p); q); r);

Tab [1] = 0; Ptr1 [1] = 0; *Ptr2 = 1; *Ptr1 = 1; *(Tab + 1) = 0; /* valeur de Ptr1 aprs l'instruction suivante ?*/ *(Ptr1 + 1) = 0; /* valeur de Ptr1 aprs l'instruction suivante ?*/ *(Ptr1 ++) = 0; /* Instruction suivante incorrecte, pourquoi ? */ *(Tab++) = 0; }

_______________________________________
ENST BCI Informatique

442 44 2

_______________________________________
ENST BCI Informatique

443 44 3

Gestion de la mmoire

Gestion de la mmoire

C et adressage de la mmoire : Exemple, commentaires(1)


Rappels : le nom dun tableau est un pointeur constant sur ladresse de dbut du tableau. Il ne peut donc pas tre modifi. o Ici la case dont le nom est Tab contient donc zro. Larithmtique des pointeurs se fait en fonction de la taille de lobjet point. Par exemple, si on a : short * Ptr; o Alors linstruction : Ptr = Ptr + 2; signifie : Ptr = Ptr + 2*sizeof(short)

_______________________________________
ENST BCI Informatique

444 44 4

_______________________________________
ENST BCI Informatique

445 44 5

Gestion de la mmoire

Gestion de la mmoire

Dans lexemple ci-aprs, on rcrit la fonction strcpy de la bibliothque C. L'objectif est de montrer les particularits de la gestion des chanes de caractres en C..., qui sont dues au fait qu'il n'y a pas de type chane de caractres. Celles-ci sont ranges sous forme dun tableau d'octets termin par un caractre NULL (octet zro). La premire version ressemble ce qu'on crirait dans n'importe quel autre langage que le C Ligne 9 de cette version : si l'utilisateur de la fonction n'a pas mis de caractre NULL en fin de tableau, Copie va recopier toutes les cases mmoires partir de l'adresse source dans la zone dont l'adresse de dbut est dest. Deuxime version : on fait l'affectation dans le test. Troisime version : on manipule des pointeurs plutt que des index dans un tableau. Quatrime version : on met en uvre l'oprateur unaire ++ qui incrmente ici aprs l'affectation Cinquime version : on utilise le fait qu'il n'y a pas de type boolen, et que les oprations logiques renvoient un entier : - ( 1 signifie vrai, 0 signifie faux) - de la mme faon, tout ce qui n'est pas gal zro est vrai. Le while teste donc la valeur de l'affectation, qui sera toujours vraie tant qu'on n'arrive pas sur le NULL de fin de chane. Ce style de programmation, qui donne du code difficile lire et maintenir ne produit pas des excutables beaucoup plus performants. Laissons au compilateur le travail d'optimisation, dans la plupart des cas, il le fait mieux que les programmeurs.

Exemple, commentaires(2)
Les deux instructions suivantes sont quivalentes :
Tab [1] = 0 ; et Ptr1 [1] = 0;

Voici leur effet en mmoire : 0 1 2 3 Effet de *Ptr2=1 : 0 1 2 3 0 0 0 0 1

Effet de *Ptr1=1

0 1 2 3

0 1 0 0

_______________________________________
ENST BCI Informatique

446 44 6

_______________________________________
ENST BCI Informatique

447 44 7

Gestion de la mmoire

Gestion de la mmoire

Exemple : copie de tableaux de caractres en C premire version : 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. void Copie ( char *dest, char *source) { char *p, *q; int i; i=0; p=dest; q=source; for (i=0; q[i] != '\0'; i=i+1) p[i]=q[i]; p[i]=q[i]='\0'; }

Exemple, commentaires(3)

Aprs : *(Ptr1 + 1) = 0,

Ptr1 vaut 2.

Si on fait maintenant : *(Ptr1 ++) = 1, Ptr1 passe 4.


/* Instruction suivante incorrecte, pourquoi ? */ *(Tab++) = 0;

remplacement successifs des lignes 8 10 : 8. 9. 10. 8. 9. 10. 8. 9 10. while((p[i]=q[i]) != '\0') i=i+1;

On ne peut pas modifier un pointeur constant.

while( (*p=*q) != '\0'){ p=p+1; q=q+1;} while( (*p++=*q++) != '\0');

8. 9.et 10

while(*p++=*q++);

Le code gnr sur SPARC par le compilateur gcc donne 5 instructions assembleur pour la boucle dernire version et 6 pour la boucle premire version,

_______________________________________
ENST BCI Informatique

448 44 8

_______________________________________
ENST BCI Informatique

449 44 9

Gestion de la mmoire

Gestion de la mmoire

La partie du systme d'exploitation qui s'occupe de grer la mmoire s'attache atteindre les objectifs suivants : protection : dans un systme multi utilisateurs, plusieurs processus, appartenant des utilisateurs diffrents, vont se trouver simultanment en mmoire. Il faut viter que l'un aille modifier, ou dtruire, les informations appartenant un autre. rallocation : chaque processus voit son propre espace d'adressage, numrot partir de l'adresse 0. Cet espace est physiquement implant partir d'une adresse quelconque. partage : permettre d'crire dans la mme zone de donnes, d'excuter le mme code. organisation logique et physique : comme on le verra, un instant donn, seule une partie du programme et des donnes peut se trouver en mmoire si la taille de cette dernire est trop faible pour abriter l'ensemble de l'application.

Gestion de la mmoire : objectifs

protection : par dfaut, un processus ne doit pas pouvoir accder lespace dadressage d'un autre, partage : sils le demandent, plusieurs processus peuvent partager une zone mmoire commune, rallocation : les adresses vues par le processus (adresses relatives ou virtuelles) sont diffrentes des adresses dimplantation (adresses absolues),

organisation logique : notion de partitions, segmentation (cf. Intel), pagination, mmoire virtuelle, organisation physique : une hirarchie de mmoire mettant en uvre les caches matriels, la mmoire elle-mme, le cache disque, le(s) disque(s) (qui est un support permanent, contrairement aux prcdents),

_______________________________________
ENST BCI Informatique

450 45 0

_______________________________________
ENST BCI Informatique

451 45 1

Gestion de la mmoire

Gestion de la mmoire

Un accs la mmoire ne veut pas forcment dire un accs la mmoire RAM, comme on pourrait le croire. Les processeurs tant de plus en plus rapides, les mmoires leur semblent de plus en plus lentes, pour la simple raison que les performances de ces dernires progressent beaucoup plus lentement que les leurs. Pour pallier ce dfaut, les constructeurs implantent de la mmoire sur les "chips" c'est dire sur les processeurs eux-mmes. Ces mmoires sont appeles "caches". Elles contiennent un sous-ensemble de la mmoire RAM. Ces caches s'appellent "on chip caches", primary caches ou caches primaires. Il existe galement des caches secondaires, qui ne sont pas sur le processeur luimme, mais auxquels on fait accs par un bus ddi, plus rapide que celui permettant les accs la mmoire classique.

Hirarchie des mmoires

Du plus rapide et plus petit (niveaux bas) au plus lent et plus volumineux (niveaux hauts) :

Quand la capacit dcrot, le cot du bit augmente. On fait accs aux disques locaux par le bus, l'accs aux disques distants se fait par le rseau. Remarque : un instant donn, une information peut tre prsente plusieurs niveaux de la hirarchie.

_______________________________________
ENST BCI Informatique

452 45 2

_______________________________________
ENST BCI Informatique

453 45 3

Gestion de la mmoire

Gestion de la mmoire

Grstion de la mmoire

1. Qu'est-ce que la mmoire ? - Dfinitions, exemples

2. Allocation contigu en mmoire - Partitions de taille fixe, de taille variable 3. Pagination et mmoire virtuelle

_______________________________________
ENST BCI Informatique

454 45 4

_______________________________________
ENST BCI Informatique

455 45 5

Gestion de la mmoire

Gestion de la mmoire

Problmes lis la gestion de la mmoire en partitions : Fragmentation interne : -Un processus n'utilise pas la totalit de la partition. Fragmentation externe : -Certaines partitions ne sont pas utilises, car trop petites pour tous les travaux ligibles. Comment choisir a priori la taille des partitions ?

Allocation contigu : les partitions


L'espace mmoire est allou dynamiquement, de faon contigu, lors de l'implantation des processus en mmoire : on ne sait pas dcouper l'espace d'adressage d'un programme en plusieurs parties disjointes :

Sur l'exemple, Job_5 peut tre implant deux adresses diffrentes (laquelle choisir ?), mais on ne peut pas charger Job_4 qui demande un espace mmoire de 125 Ko.

_______________________________________
ENST BCI Informatique

456 45 6

_______________________________________
ENST BCI Informatique

457 45 7

Gestion de la mmoire

Gestion de la mmoire

Si plusieurs partitions sont susceptibles de recevoir un processus, laquelle choisir : - First fit : on range le processus dans la premire partition libre et suffisamment grande trouve, - Best Fit : on va chercher la partition dont la taille approche au mieux celle du processus charger en mmoire. - Worst Fit : on met le processus dans la plus grande partition libre.

Politiques de placement des partitions


Si plusieurs zones libres sont susceptibles d'accueillir le processus charger, plusieurs politiques de placement sont possibles : - First Fit : on place le processus dans la premire partition dont la taille est suffisante - Best Fit : on place le processus dans la partition dont la taille est la plus proche de la sienne. - Worst Fit : on place le processus dans la partition dont la taille est la plus grande. Best Fit va conduire la cration de nombreux blocs minuscules nonrutilisables, on utilise gnralement Worst Fit en classant les blocs par ordre de tailles dcroissantes, un parcours First Fit sur la table ainsi classe donnera un placement Worst Fit. Dans le cas o il n'existe aucun bloc libre assez grand, on peut faire du garbage collecting ou ramasse-miettes (cf. plus loin).

_______________________________________
ENST BCI Informatique

458 45 8

_______________________________________
ENST BCI Informatique

459 45 9

Gestion de la mmoire

Gestion de la mmoire

Le garbage collecting est appel ramasse miettes en franais. Il est utilis par des logiciels (emacs, crit en Lisp), par des langages (Java, Lisp), pour grer leur propre espace mmoire. La dfragmentation dun disque sapparente du garbage collecting..

Gestion de la fragmentation : le ramasse-miettes (garbage collecting)

Cot de l'opration ? On peut galement faire du compactage (regroupement des seuls trous voisins)

_______________________________________
ENST BCI Informatique

460 46 0

_______________________________________
ENST BCI Informatique

461 46 1

Gestion de la mmoire

Gestion de la mmoire

Limites de l'allocation contige. Knuth a dmontr que, quelle que soit la stratgie adopte, on n'arrive jamais recouvrir parfaitement l'espace libre par des blocs occups. Sa dmonstration montre que la proportion de blocs libres (trous) sera d'un tiers par rapport au nombre de blocs occups. Il rpartit les blocs occups en trois catgories : - ceux qui ont deux voisins libres, - ceux qui ont deux voisins occups, - ceux qui ont un voisin de chaque nature.

Rgle de Knuth (1)

Soit : - N : nombre de blocs occups, - M : nombre de blocs libres, Les diffrents types de blocs occups : - Type a : bloc adjacent deux blocs libres, - Type b : bloc adjacent un bloc occup et un libre, - Type c: bloc adjacent deux blocs occups, Si : - Na : nombre de blocs de type a - Nb : nombre de blocs de type b, - Nc : nombre de blocs de type c Alors : N = Na + Nb + Nc et : M = Na + Nb/2 + #/2 ( #> 0 ou < 0 selon les bords)

_______________________________________
ENST BCI Informatique

462 46 2

_______________________________________
ENST BCI Informatique

463 46 3

Gestion de la mmoire

Gestion de la mmoire

Rgle de Knuth (2)


On note : - p : proba (on ne trouve pas de trou de bonne taille), - 1-p : proba (on trouve un trou de bonne taille). On a : - proba (M augmente de 1) = proba (on libre un bloc "c") = Nc/N - proba (M baisse de 1) = proba(on trouve un trou de bonne taille) + proba (on libre un bloc "a") = 1-p+Na/N A l'quilibre : proba (M augmente de 1) = proba (M baisse de 1) donc : - Nc/N = Na/N+1-p - puisque N-2M ! Nc-Na on a M = N/2 * p - si p ! 1 alors M ! N/2 ou encore N = 2 * M Conclusion : l'quilibre, un bloc sur trois est libre, c'est--dire inoccup !

_______________________________________
ENST BCI Informatique

464 46 4

_______________________________________
ENST BCI Informatique

465 46 5

Gestion de la mmoire

Gestion de la mmoire

Gestion de la mmoire

1. Qu'est-ce que la mmoire ? - Dfinitions, exemples

2. Allocation contige en mmoire - Partitions de taille fixe, de taille variable +

3. Pagination et mmoire virtuelle

_______________________________________
ENST BCI Informatique

466 46 6

_______________________________________
ENST BCI Informatique

467 46 7

Gestion de la mmoire

Gestion de la mmoire

Pagination
Le problme des partitions est la fragmentation car les programmes ont besoin d'espace contigu. La pagination permet d'utiliser des espaces non contigus. Comme on le voit sur le schma, des pages qui se succdent dans l'espace vu par l'utilisateur peuvent tre implantes sur des pages mmoires non contigues. Les pages sont charges en mmoire l o il y a de la place. La table de pages mmorise le placement de chaque page logique en mmoire physique. La table de pages (TP) est un tableau tel que TP[i] donne le numro de page physique (l'adresse en mmoire) o a t charge la page i. Exemple : Si les pages 0,1 et 2 d'un processus sont charges sur les pages mmoire 24, 78 et 100 on aura : TP [0] = 24, TP [1] = 78 et TP [3] = 100.

L'espace dadressage est divis en pages, la mmoire centrale est divise en blocs. (taille de la page = taille du bloc).

Table des pages : elle fait correspondre une page logique un bloc physique.

Sur l'exemple ci-dessus, seules 3 pages parmi 6 sont charges en mmoire.

_______________________________________
ENST BCI Informatique

468 46 8

_______________________________________
ENST BCI Informatique

469 46 9

Gestion de la mmoire

Gestion de la mmoire

Quand l'espace d'adressage de l'application est suprieur la taille de la mmoire physique, on parle d'adressage virtuel. On donne l'illusion l'utilisateur qu'il dispose d'un espace d'adressage illimit (en fait limit la taille du disque sur lequel est range l'application).

Mmoire virtuelle

Soit M la taille de la mmoire disponible sur la machine. Soit T la taille de l'application : Si T < M, on parle simplement de pagination, Si T > M, on parle de mmoire virtuelle, deux cas sont alors possibles : o M est la de la mmoire libre cet instant, o M est la taille de totale de la mmoire (application plus grande que la mmoire physique !)

La mmoire virtuelle donne lillusion lutilisateur (au processus) quil dispose dun espace dadressage illimit (en fait, limit par la taille du disque).

_______________________________________
ENST BCI Informatique

470 47 0

_______________________________________
ENST BCI Informatique

471 47 1

Gestion de la mmoire

Gestion de la mmoire

Passage de l'adresse virtuelle l'adresse physique : - l'adresse d'une information est divise en deux champs : numro de page virtuelle et dplacement dans cette page (ici appels p et w) - le contenu de l'entre p de la table de pages (appele TP) donne le numro de page physique p' o est charge p. Dans cette entre, c'est dire dans TP[p] figurent galement les droits d'accs la page en lecture, criture et destruction, ainsi que des indications ncessaires la pagination. Ces indications sont donnes par des bits, citons le bit V (valid) qui indique si p' est bien un numro de page en mmoire, le bit M (modified ou dirty bit) qui indique si la page a t modifie. - pour trouver l'information cherche on concatne la partie dplacement dans la page au numro de page physique trouv. Lorsqu'on ne trouve pas la page que l'on cherche en mmoire, on parle de dfaut de page (page fault, en anglais).

Correspondance entre adresse virtuelle et adresse physique


Principe de traduction dune adresse virtuelle en adresse physique :

Exemple : les adresses virtuelles et physique sont sur 32 bits, les pages font 1K octets. La page virtuelle 4 est implante sur la page physique 9. Voici les 3 tapes de passage de l'adresse virtuelle l'adresse en mmoire :

_______________________________________
ENST BCI Informatique

472 47 2

_______________________________________
ENST BCI Informatique

473 47 3

Gestion de la mmoire

Gestion de la mmoire

En allocation par partition, les stratgies sont des stratgies de placement, ici on utilise des stratgies de REMPLACEMENT, les tailles de toutes les partitions (ici des pages) tant gales. Les principales stratgies sont les suivantes : Moins Rcemment Utilise (MRU) / Least Recently Used (LRU) : On suppose que le futur ressemblera au pass. Implique que l'on conserve une trace des dates d'accs aux pages. Moins Frquemment Utilise (MFU) / Least Frequently Used (LFU) : On suppose que le futur ressemblera au pass. Implique que l'on conserve une trace du nombre d'accs aux pages. Problme des pages rcemment charges. La Plus Ancienne / First In First Out (FIFO) : Implique que l'on conserve une trace de l'ordre de chargement.

Stratgies de remplacement

Les principales stratgies de remplacement (indiquent quelle page doit tre remplace) : - Least Recently Used (LRU), la page la moins rcemment utilise: lalgorithme le plus utilis. Les hirarchies de mmoires sont gres LRU. - Least Frequently Used (LFU), la page la moins frquement utilise. - First In First Out (FIFO), la plus ancienne.

_______________________________________
ENST BCI Informatique

474 47 4

_______________________________________
ENST BCI Informatique

475 47 5

Gestion de la mmoire

Gestion de la mmoire

La pile : utilisation des arguments passs main

Soit le programme :
int main (int argc, char *argv[], char * arge []){ short i; printf("adresse de argc : 0x%x, argc : %d\n", &argc, argc ); printf("adresse de argv : 0x%x, argv : %x\n", &argv, argv ); printf("adresse de arge : 0x%x, arge : %x\n", &arge, arge ); for(i=0 ; argv[i] != 0; i++) printf ("argv[%d] (0x%x) : %s\n", i, argv[i], argv[i]); for(i=0 ; i < 3 ; i++) printf ("arge[%d] } (0x%x) : %s\n", i, arge[i], arge[i]);

Rsultats:
adresse de argc : 0xeffff6e4, argc : 1 adresse de argv : 0xeffff6e8, argv : effff704 adresse de arge : 0xeffff6ec, arge : effff70c argv[0] (0xeffff814) : ./a.out arge[0] (0xeffff81c) : ARCH=sparc-sun-solaris2.4 arge[1] (0xeffff836) : DISPLAY=:0.0 arge[2] (0xeffff843) : EDITOR=emacs

_______________________________________
ENST BCI Informatique

476 47 6

_______________________________________
ENST BCI Informatique

477 47 7

Gestion de la mmoire

Gestion de la mmoire

La pile : main
Structure de la pile lors de l'appel main : nombre de mots sur la ligne de commande : argc, tableau de pointeurs (termin par un nul ) contenant les mots de la ligne de commande : argv, tableau de pointeurs (termin par un nul) contenant les variables d'environnement : arge.

_______________________________________
ENST BCI Informatique

478 47 8

_______________________________________
ENST BCI Informatique

479 47 9

Вам также может понравиться