La distinzione di alto livello è durata dell'oggetto. Ad esempio, se stavi scrivendo un videogioco, dovresti assegnare gli oggetti corrispondenti ai mostri sullo heap, tramite new
. In questo modo, l'oggetto sottostante del mostro vive esattamente come il mostro, il che è inconoscibile quando scrivi il programma. Quando il giocatore uccide il mostro, il tuo codice può distruggere l'oggetto mostro usando delete
.
Un contatore punteggio totale, d'altra parte, si utilizzerà l'altro modulo, perché si sa per quanto tempo si vuole che il contatore rimanga intorno (presumibilmente, finché il gioco è in esecuzione!).Mettendo quella forma nella "portata globale", al di fuori di qualsiasi corpo di funzione, essa verrebbe allocata staticamente, come parte del binario del programma stesso.
Infine, se si dovesse calcolare la somma di una serie, in questo modo:
int mysum(int* arr, int len) {
int sum = 0;
for (int i = 0; i < len; ++i) { sum += arr[i] }
return sum;
}
la variabile sum
è allocato sullo stack, che è fondamentalmente ciò che si vuole: una variabile temporanea che non si devi esplicitamente deallocare, e che è solo intorno a quando quella funzione è effettivamente in esecuzione.
fonte
2010-05-02 01:07:18
Vedere qui per informazioni su heap e stack: http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap, http://stackoverflow.com/questions/ 408670/stack-static-and-heap-in-c –