cs_Stormy
Messages postés255Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention16 janvier 2007
-
26 juil. 2004 à 14:24
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
26 oct. 2004 à 17:48
salut à tous,
Quelqu'un aurait-il la gentillesse de m'expliquer la différence entre la pile (stack) et le tas (heap). Je sais que le tas alloue une mémoire plus conséquente mais sinon qu'est-ce qu'il faut vraiment savoir ?
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 26 juil. 2004 à 15:42
sur la pile, on empile et depile des données. Elle est de type LIFO, last in first out (pas tt le temps), alors ke le tas est une zone de memoire alloué pour chak processus, et elle est egale a 4go sur win...
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 26 juil. 2004 à 23:23
Salut,
Le tas n'a pas de vocation particuliere et est un bloc de mémoire allouable au byte près.
La pile est de la mémoire paginée (réserve par page de 4 Ko) et a pour seule utilisateur esp , le registre pointeur de pile.Au démarrage , il y en a obligatoirement avec le programme.
ToutEnMasm
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 26 juil. 2004 à 23:26
ToutEnMasm > tu sais comment est defini la taille de la pile pour un processus ? Ou est stocké cette memoire ? Est ce que la pile est accessible par tous les processus ou bien est dependant du processus l'utilisant ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 27 juil. 2004 à 10:26
Salut,
Pour un process (autrement dit un programme ) la taille de la pile est défini dans le fichier executable lui même.
Le format de fichier PE possède deux datas fixant a 2 pages la taille de la pile au démarrage du programme et une variable fixant le maximum de pile allouable par le programme.
Voir mon site (la pile et le proc) pour des renseignements plus précis,en bas de page.
La heap possède deux variables similaires dans le pe.
La mémoire pile est propre a chaque process,seuls les interruptions du système utilise éventuellement cette pile.
Pour les API je ne suis pas trop sur de quelle mémoire pile elles utilisent.
Pour savoir ou est stocké cette mémoire,il faut utiliser virtualQuery en lui passant la valeur de esp.
L'exemple de gestion dynamique de la pile que j'ai mis sur code source utilise cette API.
TouEnMasm
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 28 juil. 2004 à 12:08
salut,
la pile est utilisée pour stocker des variable locales a une fonction et pour passer des parametres a cette fonction. La memoire allouée dans la pile est toujours éphemere et sera libérée a la sortie de la fonction. Ce qui est logique car sinon, la fonction appelante n'aurait plus la meme base de pile.
toute la memoire de ton process est paginée que ce soit le code, les données, la pile,le tas ou quoi que ce soit. ( je l'ai déjà dit a ToutEnMasm mais il n'écoute rien ).
le tas te permet d'effectuer des allocations de memoire qui vont pouvoir etre utilisés en dehors de la fonction qui les a crées.
exemple: new et delete du c++
autrement dit:
new MACRO sze
invoke GlobalAlloc,GPTR,sze ; dans le tas
ENDM
delete MACRO pbloc
invoke GlobalFree,pbloc
ENDM
fcttest PROC param1:DWORD,param2:DWORD
LOCAL local1:DWORD ; dans la pile
new 1000h ; dans le tas
ret 8 ; desalloue variables locales + params de la pile
fcttest ENDP
main PROC
push param2 ; dans la pile
push param1 ; dans la pile
call fcttest ; retour de fonction dans la pile
delete eax ; libere le bloc alloué dans le tas
main ENDP
CodeFighter
Messages postés8Date d'inscriptionjeudi 7 octobre 2004StatutMembreDernière intervention 8 novembre 2004 26 oct. 2004 à 16:56
La pile et le tas sont tous deux des zones de mémoire dynamique :
la pile : il n'y a pas de reservation, on empile et on dépile des valeurs à la vollé. Chaque processus à sa propre pile et il y a une pile pour le systeme.
le tas : dans un tas, on doit reserver la place utilisé et la liberer (malloc & free). Cette gestion est à la charge du SE. Chaque processeur voit un espace d'adressage différant. Actuellement, les processeur (32 bits) admette 4 Go de mémoire principale et 64 Go de mémoire virtuelle. Dans ces condition, il est tous à fait possible d'avoir donc un tas de + de 4 Go ... mais ce n'est pas réalisé par la plus part des systeme. En général, on ne laisse voir que les 4 Go d'adressage. Et sur ces 4 Go, une partie de la place est utilisé par le systeme, si bien qu'en general, le tas est bien inferieur à 4 Go !
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 26 oct. 2004 à 17:35
re,
est-tu sur de toi quand tu dis que le system d'exploitation ne reserve pas + de 4Go de tas parsque il ne le gere pas.
Je ne suis pas d'accord avec toi car la memoire physique accessible par un process reste toujours de 0x400000 a 0x80000000. or, le tas, c de la memoire.
ce que tu dit me parait bizarre car cela voudrait dire qu'un process pourrait acceder a plusieurs blocs memoire différents ( stockés dans le swap ) a l'aide d'une meme adresse memoire.
le swap est utilisé entre les différents process par le system d'exploitation mais pas au sein d'un meme process.
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 26 oct. 2004 à 17:48
CodeFighter a raison, le tas n'est pas de 4go, c'est l'espace adressable ki l'est. Les DLL et autres, en particulier des infos pour le systeme, sont stocké ds ces 4go..J'avais la table exacte, mais ca doit facilement se trouver sur le net.