Bon je ne vais parler que de Windows, et de programmes en C. Quand tu charges ton programme en memoire, l'espace qui lui est alloué sous windows est decoupé en grosso modo 4 zones:
Code, Data, Heap et Stack.
*********
* STACK *
*********
| | |
V V V
^ ^ ^
| | |
*********
* HEAP *
*********
* DATA *
*********
* CODE *
*********
La stack occupe l'espace en croissant vers le bas et la heap en croissant vers le haut (l'espace maximum allouable par un programme est une valeur qui est modifiable, et qui est lue par l'OS au lancement du programme. Le plus souvent, la valeur par defaut suffit).
Le section code contient le code du programme, la section data, la memoire statique, la heap la memoire dynamique, et la stack tout le reste, et en particulier les variables locales.
Donc si tu a une variable locale de type char tc[30000][50], elle sera allouee dans la stack. Si cette variable etait globale ou si elle etait static, ce serait dans la section data.
Et si c'etait char **tc = malloc(30000*50) ce serait dans la heap.
Bon bien entendu, j'ai hyper simplifié:
L'ordre des sections stack heap data code est l'ordre par defaut et peut etre modifié (option /DO) les sections code et stacks peuvent etre multiples.
De plus, sous windows, en plus de la heap par defaut de son programme, il y a moyen de creer des heaps specifiques au moyen de HeapCreate()
Dans le modele unix, on a des choses +/- similaires:
une section .text (pour le code), une section .data pour la memoire statique initialisée, une section .bss pour la memoire statique non-initialisée (BSS vient de Block Started by Symbol), une section .heap et une section .stack
Si de plus, c'est du C++ et non du C, on aura eventuellement: une section .init (le startup code), une section .fini (l'exit code), une section .ctor (pour les constructeurs) et une section .dtor (pour les destructeurs)
A+,
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --