120 votes

Mémoire de pile et mémoire de tas

Duplicata possible :
Que sont la pile et le tas, et où sont-ils ?

Je programme en C++ et je me demande toujours ce qu'est exactement la mémoire de pile par rapport à la mémoire de tas. Tout ce que je sais, c'est que lorsque j'appelle new, je récupère la mémoire du tas. Si je crée des variables locales, je récupère la mémoire de la pile. Après quelques recherches sur Internet, la réponse la plus courante est que la mémoire de la pile est temporaire et que la mémoire du tas est permanente.

Le modèle de la pile et du tas est-il un concept du système d'exploitation ou de l'architecture informatique ? Ainsi, certains d'entre eux peuvent ne pas suivre le modèle de mémoire de pile et de tas ou tous le suivre ?

La mémoire de pile et de tas est l'abstraction du modèle de mémoire de la mémoire virtuelle (qui peut échanger de la mémoire entre le disque et la RAM). La mémoire de pile et de tas peut donc être physiquement de la RAM ou du disque ? Quelle est donc la raison pour laquelle l'allocation du tas semble être plus lente que celle de la pile ?

Par ailleurs, le programme principal serait-il exécuté dans la pile ou dans un tas ?

Par ailleurs, que se passerait-il si un processus se trouvait à court de mémoire de pile ou de mémoire de tas allouée ?

Remerciements

78voto

Eoin Points 476

I

T

T A .

G S .

H

38voto

rskar Points 1878

La mémoire de pile est spécifiquement la plage de mémoire accessible via le registre de pile de l'unité centrale. La pile a été utilisée pour mettre en œuvre le modèle de code "Jump-Subroutine"-"Return" en langage assembleur.

S

H

M

3voto

nbt Points 15965

Il s'agit d'une abstraction linguistique - certains langages ont les deux, d'autres l'un ou l'autre, d'autres encore aucun.

Dans le cas de C++, le code n'est exécuté ni dans la pile ni dans le tas. Vous pouvez tester ce qui se passe si vous manquez de mémoire dans le tas en appelant de façon répétée new pour allouer de la mémoire dans une boucle sans appeler delete pour le libérer. Mais faites une sauvegarde du système avant de procéder à cette opération .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X