Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Différence entre stack et heap [ Archives / Forum general 80xxx ] (Stormy)

lundi 26 juillet 2004 à 14:24:24 | Différence entre stack et heap

Stormy


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 ?

Merci ++

lundi 26 juillet 2004 à 15:42:12 | Re : Différence entre stack et heap

AlexMAN

Membre Club
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...

Voila, c pas complet, mais tt ske je C...

++


lundi 26 juillet 2004 à 15:45:06 | Re : Différence entre stack et heap

AlexMAN

Membre Club
sous win NT, elle est moindre sur win9x je crois..

lundi 26 juillet 2004 à 23:23:20 | Re : Différence entre stack et heap

ToutEnMasm

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


lundi 26 juillet 2004 à 23:26:06 | Re : Différence entre stack et heap

AlexMAN

Membre Club
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 ?

mardi 27 juillet 2004 à 10:26:32 | Re : Différence entre stack et heap

ToutEnMasm

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

mercredi 28 juillet 2004 à 12:08:14 | Re : Différence entre stack et heap

patatalo

Membre Club Administrateur CodeS-SourceS

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

@++

mercredi 4 août 2004 à 18:45:06 | Re : Différence entre stack et heap

patatalo

Membre Club Administrateur CodeS-SourceS

re,

le tas n'est pas une zone de 4go puisque ca représente la memoire virtuelle totale.

la zone de memoire accessible par un process est + grande sous win9X que sous NT.

elle s'etend de 00400000h a C0000000h pour 9X.
elle s'etend de 00400000h a 80000000h pour NT/XP.

@++

mardi 10 août 2004 à 18:48:49 | Re : Différence entre stack et heap

vecchio56

Administrateur CodeS-SourceS
AlexMAN a dit: "Elle est de type LIFO, last in first out (pas tt le temps)".
Si une pile n'est pas de ce type, de quelle type est-elle donc?

mardi 10 août 2004 à 19:20:14 | Re : Différence entre stack et heap

AlexMAN

Membre Club
FIFO, First in First out


1 2

Cette discussion est classé dans : différence, stack, heap, tas


Répondre à ce message

Sujets en rapport avec ce message

[NASM] context stack [ par littlefl ] C'est un bug ou c'est moi ? Parce-que dans la doc de NASM, il est écrit que les defines spécifiques au context stack ont leur nom précédé de %$ et que Stack [ par AlexMAN ] Bonsoir, Je me pose une kestion :Si au debut d'une fonction, je fais : lea edx, [esp - 32]mov esp, edxcall CreateRectRgnOn est d'accord, la pile est r Double question : Dual Core et Heap [ par epineurien ] Salut !J'aurais deux questions complétement différentes :1) Comment fait-on pour gérer les processeurs double coeur (ou plus) en ASM ?2) J'utilise bea Aide à la compréhension d'un code [ par mmaximum ] Bonjour,J'ai un code(ci-dessous) mais je n'ai jamais fais d'assembleur et je ne comprend pas tout.Je connais le C,C++,python, et ca n'a pas l'aire de


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.