Re: gestion de la mémoire
Citation:
Envoyé par salseropom
Bonjour, j'aurais deux questions concernant les variables statiques ou dynamiques.
1)Si j'ai bien compris, la pile
Le langage C ne définit pas de 'pile'. Il parle éventuellement de mémoire automatique (sous entendu à allocation/libération automatique). Ca concerne les 'variables locales'. La durée de vie est celle du bloc de définition. Idem pour la portée.
http://emmanuel-delahaye.developpez....es.htm#donnees
Citation:
(donc l'ensemble des variables statiques, sauf erreur de ma part)
La mémoire statique, c'est autre chose. C'est un bloc de donnée de taille connue avant le démarrage du main(). Cette mémoire est allouée / libérée en dehors de toute intervention du programmeur. La durée de vie est >= à celle de l'application.
Citation:
est de taille limitée donc il y a le tas (ensemble des variables dynamiques).
Admettons...
Citation:
L'intérêt du tas (ou un intérêt) est qu'il y est de grande taille si bien que l'on peut y mettre toutes nos variables mais malheureusement le temps d'accès à une variable dans le tas est plus grand que celui d'une variable dans la pile. Jusque là ai-je raison ?
Beuh... Le langage C ne dit rien sur les performances. J'imagine que ça doit dépendre de l'implémentation... Faire des mesures.
Citation:
2) Si je fais (Species est une structure contenant deux doubles, un char * et deux double * tab[7])
Code:
1 2 3
|
Species ** t1=malloc(3*sizeof(*t1));
Species * t2=malloc(3*sizeof(*t2)); |
alors les tableaux t1 et t2 sont dynamiques (donc dans le tas)
Les tableaux pointés par t1 et t2 sont situés en mémoire dynamique, ce que tu appelles le tas ou heap.
Citation:
et chaque élément de t1 est un Species donc statique
Non. Les éléments de t1 sont des pointeurs définis dans le 'tas', mais non initialisés.
Citation:
et chaque élément de t2 est un Species * donc dynamique donc dans le tas. Est-ce vrai ?
Oui.