vbextreme ha scritto:
io non ci dormo la notte...
Risposta sciocca
vbextreme ha scritto:
ma che diavolo centra lo stack con le liste? mica staremo andando ot?
di certo avere uno stack "limitato"(2gb,macchine a 32bit espandibile a 3gb) non penso sia un problema.
Risposta dal tono ... diciamo sciocco , per non infierire, oltre che sbagliata !
Invece "candaluar" ha ragione, lo stack e' una risorsa limitata, e anche molto piu' limitata della memoria (chi fa del multithreading lo sa perfettamente).
Gli "stack overflow" sono degli errori abbastanza complicati da identificare.
Ma c'e' anche il disco: non e' inusuale ritrovarsi con il disco pieno (0 byte liberi). I motivi sono vari. I piu' classici sono i seguenti:
- l'applicazione scrive un file di log che non viene mai chiuso.
- oppure crea sempre nuovi file di log e quelli vecchi non vengono mai rimossi.
Ma c''e' anche il numero di bit usati per rappresentare gli interi: 8,16,32 o 64bit.
Non si controlla mai se che la somma o la moltiplicazione di due interi ha generato un overflow, per il semplice fatto che si suppone che la scelta della dimensione dell'intero fatta in un certo punto del programma sia sufficiente per tutte le operazioni.
Quindi si ritorna al punto di partenza: certe risorse si suppongono sufficientemente ampie da non avere la necessita' di controllare se sono esaurite.
Per quanto riguardala memoria, questo
non vuol dire che non si deve mai chiamare la free: se non la si chiama, si generano i memory leak e ci si trova nella situazione descritta nei post precedenti!
Vuol dire solamente che, a meno di casi particolari, si puo' tranquillamente supporre di avere tutta la memoria necessaria, e quindi controllare se la malloc ritorna NULL e' poco utile. Cosi' come e' poco utile controllare se sul disco c'e' abbastanza spazio per scivere il file.
Si deve sempre equilibrare il numero di controlli, e quindi la complessita', l'efficienza e la mantenibilita' del codice, con la probabilita' che il controllo fallisca: se la probabilita' e' infinitesima, il controllo e' poco utile, ma il corrispondente codice richiede di essere mantenuto e potrebbe rendere inefficiente l'applicazione.