Salve.
Vorrei capire quando utilizzare la memoria heap o stack in C.
Quale devo usare una o l'altra?
Grazie
Salve.
Vorrei capire quando utilizzare la memoria heap o stack in C.
Quale devo usare una o l'altra?
Grazie
Le variabili locali usano lo stack. Se devi usare grandi quantità di memoria usa le funzioni di allocazione come malloc, calloc e l'heap
No MP tecnici (non rispondo nemmeno!), usa il forum.
Scusa Oregon, quando intendi grandi quantità di memoria cosa intendi? tipo array? Puoi farmi un esempio o rimandarmi a qualche sito che specifica?
Grazie.
Posso fare queste affermazioni?:
1 Il metodo main e risiede nella stack e accede al heap attraverso le funzioni malloc(), calloc(), free(), realloc().
2 Il puntatore è un elemento che può puntare sia a variabile della stack che del heap
Questa affermazione devi esprimerla meglio in italiano perché non si capisce.
main non è un metodo ma una funzione, non è main che risiede nello stack. Sono le variabili e array locali (a qualsiasi funzione, non solo per il main) che risiedono nello stack. L'heap si alloca/libera (tutte le funzioni e non solo il main lo possono fare) tramite le malloc/free ...
Questo è corretto. Un puntatore punta a memoria e sia stack che heap sono strutture della memoria.2 Il puntatore è un elemento che può puntare sia a variabile della stack che del heap
No MP tecnici (non rispondo nemmeno!), usa il forum.
Oltre alle dimensioni (lo stack è grande in tutto qualche MB su sistemi operativi "normali", e se superi il limite il programma va in crash) c'è un'altra differenza importante: lo stack "forza" un determinato lifetime (ovvero, le variabili che dichiari locali ad una funzione esistono solo finché questa non ritorna), mentre l'allocazione sull'heap fornisce memoria che decidi tu quando deallocare. Questo per tante strutture dati (ad esempio, liste linkate) o in generale quando devi allocare dati che devono sopravvivere più a lungo della funzione corrente è fondamentale.
Amaro C++, il gusto pieno dell'undefined behavior.