Domanda sulle liste in C

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Domanda sulle liste in C

    Pensateci
  • Re: Domanda sulle liste in C

    Io non ci dormo la notte...
  • Re: Domanda sulle liste in C

    Una risorsa limitata è lo stack, può dare problemi se definiamo troppi buffer locali o se utilizziamo funzioni ricorsive (belle da vedere ma da evitare in ambienti di produzione).
  • Re: Domanda sulle liste in C

    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.
  • Re: Domanda sulle liste in C

    Scusa, volevo rispondere alla questione posta da migliorabile:
    Ma a voler essere pignoli: e' solo l'allocazione della memoria che deve essere controllata?
    O, oltra alla memoria che e' finita (da cui l'heap non potra' mai essere infinito) ci sono altre risorse che andrebbero controlate?

    Io ne ho in mente almenu una, ovvia. Ed almeno un'altra, molto meno ovvia....
  • Re: Domanda sulle liste in C

    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.
  • Re: Domanda sulle liste in C

    Cosè che ho sbagliato?
    sciocco si si...eheheheh
    Tu non controlli mai se il disco è pieno? ma se lo si fa anche involontariamente con la "fopen",se si vuole programmare male allora non controllare niente e scrivi codice a casaccio,ma se si vuole che la propria applicazione funzioni correttamente allora un pò di difesa serve sempre.
    è "giusto"(e qui lo nego) che non sempre sia indispensabile,esempio una allocazione di pochi kb sia sulla memoria che su hard disk volendo si potrebbe tralasciare,ma se devi scrivere un file da un gb o allocare molta memoria allora è indispensabile una corretta gestione degli errori!
    Quindi io vedo giusto controllare che la malloc non ritorni null e che la fopen non ritorni null,anche se teoricamente dovrebbe andare tutto bene sappiamo tutti che praticamente finisce tutto con uno di quegli odiosi messaggi di errore!
    Non si controlla mai se che la somma o la moltiplicazione di due interi ha generato un overflow,
    No?NO!come no!Naturalmente dato che si ha il pieno controllo sugli interi,ovvero nessun'altra applicazione può interferire,allora in certe circostanze si può evitare.
    Mi è capitato innumerevoli volte,sopratutto con algoritmi grafici lavorando coi byte, di controllare l'overflow.

    Bisogna quindi partire col piede giusto,e sicuramente quando si sarà abbastanza pratici allora si potrà scegliere se controllare o meno un errore.
Devi accedere o registrarti per scrivere nel forum
21 risposte