Newsgroup: it.comp.lang.c
Titolo: Stack e Heap???

Ciao a tutti,
sono Checco da Bologna e sono decisamente inesperto in materia di
programmazione, ma sto cercando lo stesso di imparare qualcosa...
Qualcuno mi potrebbe spiegare in parole semplici o indirizzarmi a qualche
sito dove spiegarmi la differenza tra stack e heap? E Quando utilizzo una o
l'atra?
Grazie
CHECCO.


Stack e Heap sono porzioni di RAM con ruoli ben distinti.
Le dimensioni di stack e heap di un programma che gira
in un sistema operativo sono decise o dal compilatore
o dal sistema operativo. Ad ogni programma, appena viene
copiato dal disco in RAM, viene assegnata una pagina
di memoria RAM che e' composta da diverse aree, tra le
quali trovo stack e heap.
Stack
Ogni volta che allochi una variabile intera, per esempio,
all'interno di una funzione, questa viene allocata
nello stack, cioe' lo Stack Pointer viene incrementato
di 4 byte'. Quando la funzione ritorna, lo stack pointer
viene decrementato di 4 byte e la tua variabile non
c'e' piu'. Ecco perche' queste variabili vengono
chiamate Automatiche, perche' appena la funzione
ritorna, automaticamente vengono cancellate.
Lo stack assolve poi ad un altro compito,
che e' il passaggio dei parametri tramite
stack, ma questo forse e' un po' prematuro per te.
Heap
Ogni volta che esegui una richiesta di memoria di
un certo numero di byte, tramite la funzione malloc(),
il sistema operativo ti ritorna un puntatore ad
una zona di memoria libera. L'area di memoria
libera viene cercata nello heap. Se poi esegui
una free() il tuo programma comunica al sistema
operativo che l'area precedentemente richiesta
non gl'interessa piu' e quindi il sistema
operativo la mette a disposizione di altre
possibili chiamate malloc()
ciao
 Enrico
-- 
***********************************************************
* Enrico Migliore - Co-founder and Senior Software Engineer
* FATTI srl - The Service Gateway Company
* Via Donatello 48 - 20020 - Solaro - Milano - Italy
* Phone: 
+3902 9679 9655
* Fax: 
+3902 9679 9373
* e-mail: 
enrico....@fatti.com
* 
http://www.fatti.com
***********************************************************

 ha scritto nel messaggio
news:Ial_a.78671$cl3.2...@news2.tin.it...

In generale, a livello teorico, sono due strutture dati, che possono essere
usate per svariate applicazioni, tra cui la gestione della RAM, come dice
bene Enrico.
Lo stack (in italiano "la pila") e' semplicemente una struttura LIFO,
l'ultimo oggetto inserito e' il primo ad essere estratto.
Pensa giusto ad una pila di piatti.
Puoi implementarla come vuoi, con un array, con una lista, ...
Lo heap non me lo ricordo (giuro che l'avevo studiato). Mi pare che sia il
modo di gestire una sorta di struttura ad albero grazie ad un array. Ma sono
sicuro che se cerchi sul web troverai tutto quello che hai sempre sognato
sapere sugli heap (e anche sulle pile).
Ciao,
Ema

Allora...
gli stack (pila) e la heap (mucchio) sono utilizzate in tutto ciò che
riguarda l'informatica, e nella fattispecia, riguarda i software e i sistemi
operativi.
Lo stack è un tipi di organizzazione di dati per cui segue una politica
LIFO(last in, first out), cioè l'ultimo che viene inserito è quello che
viene estratto per primo; questa struttura viene utilizzata da tutti i
linguaggi di programmazione (vedi le chiamate di funzione) e da tutti i
programmi creati con questi. Lo stesso sistema operativo usa questa tecnica.
L'heap è un'area di memoria che è vista come un contenitore da utilizzare
quando c'è necessità di memoria aggiuntiva.
Questa è una spiegazione più teorica. Nel caso della programmazione è sempre
uguale, ma ci sono differenze per l'uso di una o dell'altra.
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:Ial_a.78671$cl3.2...@news2.tin.it...

Lo steak viene utilizzato per memorizzare(in RAM) copie di parametri o
variabili.... e come hanno detto si basa sul principio "LIFO", last in ,
first out. L' ultimo entrato è il primo ad uscire.
L' heap invece è utilizzato principilmente per memorizzare un area allocata
con una funzione specifica( Nel caso del linguaggio C la funzione è
malloc()). A volte però lo Stack e Heap condividono la stessa area di
memoria... Quindi sottrarre area a stack equivale a sottrarla alla heap..
e/o viceversa.....
Comunque fatti una "googlata" che sicuramente troverai ciò che cerchi o
quasi :-)).
Spero di esserti stato di aiuto...
ciao
_________JSMR___________

 sapere sugli heap (e anche sulle pile).
Non penso che l'OP si riferisse a *questo* heap, ma piuttosto all'area 
di memoria denominata heap, che non c'entra niente.

Io sapevo che quando viene richiamata una funzione lo stack pointer veniva
"decrementato" (ad es. di 4 byte nel caso di un intero), andando verso
indirizzi negativi, e poi quando la funzione ritornava veniva "incrementato"
(al contrario di quanto scritto da Checco).
Mi sbaglio?
Duccio


 Mi sbaglio?
si matematicamente e' giusto quello che dici tu ... graficamente e' giusto
anche quello che dice checco ... perche' molte volte abbiamo una
rappresentazione di stack in cui non ci rendiamo conto che viene capoovolto
in memoria ... (basta poi non fare questi errori in memoria se si usa asm
... ma con compilatori si puo' dire che non c'e' problema a pensarlo in
tutti e due i modi, tanto il funzionamento e' uguale)
ciao