Page 680 - Informatica dalla A a Z
P. 680

return 0;

               }
           Se nessuno dei costrutti catch dovesse catturare l’esecuzione rispetto al tipo passato come
           argomento dal throw, allora verrebbe eseguito il blocco con i puntini sospensivi.
           È possibile gestire anche delle “Eccezioni standard”, attraverso una specifica classe della
           libreria standard.
                                                  #include <exception>
           Esempio:
                  try

                  {
                    // codice
                  }
                  catch (const std::exception& e)
                  {
                    // Gestione eccezione e
                  }



                                         Allocazione dinamica della memoria



           La memoria è una risorsa fisica della macchina e, come tale, ha una sua dimensione che,
           per quanto grande possa essere, è pur sempre limitata.
           Nel C quando si dichiara un array siamo costretti a definire a priori una dimensione per la
           struttura dati, in quanto il compilatore deve sapere esattamente quanta memoria allocare
           per una specifica variabile. Qualche volta questo potrebbe rappresentare un ostacolo.
           Lo stesso problema si presenta anche con l’uso di variabili di tipo semplice. Le variabili,

           infatti, vivono per un tempo di esecuzione relativo al blocco di codice nel quale sono di-
           chiarate e alla fine del blocco, diventano inaccessibili.
           Le variabili vengono memorizzate in un’area di memoria riservata al programma detta
           stack, che una volta saturata (overflow dello stack) non può più essere utilizzata.
           L’ideale sarebbe invece una situazione in cui poter dichiarare e utilizzare di volta in volta
           solo lo spazio di cui abbiamo bisogno in un dato momento. Ciò è possibile grazie a una

           seconda area di memoria dedicata all’allocazione dinamica della memoria, la memoria
           heap.

           Test: Quale tra i seguenti array non è compatibile con la memorizzazione di un min-heap i
           cui elementi hanno valori 5, 7, 2, 3, 1, 8, 6? [1, 2, 6, 3, 5, 7, 8] [1, 6, 2, 3, 7, 5, 8] [1, 6, 2, 7,
           8, 3, 5] [1, 5, 2, 7, 8, 6, 3]

                                                    [1, 6, 2, 3, 7, 5, 8]

           Abbiamo quindi bisogno di un meccanismo che consenta di richiedere al sistema l’esatta
           quantità di memoria usata per una certa operazione e di un analogo meccanismo per rila-
           sciare al sistema la memoria quando non più necessaria.


                                                            676
   675   676   677   678   679   680   681   682   683   684   685