Allocazione Dinamica della Memoria
|
|
|
- Celia Scala
- 9 anni fa
- Просмотров:
Транскрипт
1 Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10
2 Scelta delle variabili Quando scriviamo un programma è fondamentale scegliere le variabili, le strutture dati e il loro tipo in modo adeguato al problema che dobbiamo risolvere. Ad esempio è importante capire quando usare una matrice, quando usare un insieme di variabili, quando usare un array... È importante capire anche quale tipo associare loro. Queste decisioni dipendono dall uso che ne vogliamo fare e dal problema che dobbiamo risolvere. Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 2 / 10
3 Allocazione statica int a [5]; int b [2][3]; char c [4]; Le variabili dichiarate in questo modo non possono variare le loro caratteristiche a tempo di esecuzione. Ad esempio, non possiamo modificare l array a a tempo di esecuzione in modo che questo contenga un numero di elementi che non sia 5. Questa prende il nome di allocazione statica della memoria. Allocazione Statica La quantità di memoria da allocare è determinata e fissata a tempo di compilazione. Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 3 / 10
4 Allocazione Dinamica Allocazione Dinamica Permette di definire variabili che possono essere create o accresciute in fase di esecuzione. Per allocare memoria in modo dinamico si usa l operatore new. Per liberare memoria allocata in modo dinamico si usa l operatore delete. Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 4 / 10
5 Operatori new e new[ ] Si usano per richiedere una quantità di memoria in modo dinamico. L operatore new è seguito da un identificatore di tipo. Se è necessario allocare più di un elemento, il numero di elementi da allocare è indicato tra parentesi quadre. Restituisce un puntatore all inizio del blocco di memoria allocato. type * pointer = new type ; type * pointer = new type [ n_ of_ elements ]; int * pointer ; pointer = new int [5]; Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 5 / 10
6 int * pointer ; int n; cin >>n; pointer = new int [ n]; Il sistema assegna dinamicamente lo spazio per n elementi int; restituisce il puntatore al primo elemento della sequenza. Come posso accedere agli elementi dell array? Con l aritmetica dei puntatori Con la notazione a indice pointer [0]; * pointer ; pointer [1]; *( pointer +1); Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 6 / 10
7 int * pointer ; int n; cin >>n; pointer = new int [ n]; Il sistema assegna dinamicamente lo spazio per n elementi int; restituisce il puntatore al primo elemento della sequenza. Come posso accedere agli elementi dell array? Con l aritmetica dei puntatori Con la notazione a indice pointer [0]; * pointer ; pointer [1]; *( pointer +1); Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 6 / 10
8 int * pointer ; int n; cin >>n; pointer = new int [ n]; Il sistema assegna dinamicamente lo spazio per n elementi int; restituisce il puntatore al primo elemento della sequenza. Come posso accedere agli elementi dell array? Con l aritmetica dei puntatori Con la notazione a indice pointer [0]; * pointer ; pointer [1]; *( pointer +1); Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 6 / 10
9 Fallimento dell allocazione La memoria dinamica è allocata in una zona di memoria detta heap. La memoria è una risorsa limitata Potrebbe finire Deve essere liberata quando non serve più Se l allocazione fallisce: Viene lanciata un eccezione di tipo bad alloc Un eccezione causa il termine del programma Esiste un modo per verificare che l allocazione sia andata a buon fine? int * p = new int ; if (!p){ // allocazione fallita } Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 7 / 10
10 Fallimento dell allocazione La memoria dinamica è allocata in una zona di memoria detta heap. La memoria è una risorsa limitata Potrebbe finire Deve essere liberata quando non serve più Se l allocazione fallisce: Viene lanciata un eccezione di tipo bad alloc Un eccezione causa il termine del programma Esiste un modo per verificare che l allocazione sia andata a buon fine? int * p = new int ; if (!p){ // allocazione fallita } Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 7 / 10
11 Fallimento dell allocazione La memoria dinamica è allocata in una zona di memoria detta heap. La memoria è una risorsa limitata Potrebbe finire Deve essere liberata quando non serve più Se l allocazione fallisce: Viene lanciata un eccezione di tipo bad alloc Un eccezione causa il termine del programma Esiste un modo per verificare che l allocazione sia andata a buon fine? int * p = new int ; if (!p){ // allocazione fallita } Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 7 / 10
12 Liberare Memoria: delete, delete[] L operatore è seguito da un puntatore ad un blocco di memoria allocata dinamicamente (quindi allocato con una new oppure un puntatore a null). delete serve per liberare memoria allocata per un singolo elemento delete pointer ; delete [] serve per liberare memoria allocata per un array delete [] pointer ; Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 8 / 10
13 Errore di programmazione: perdita dei puntatori Tenere sempre traccia della memoria dinamica utilizzata. int x =5; int * p = new int ; p=&x; Come faccio ad accedere alla memoria dinamica allocata? È stata allocata una certa quantità di memoria dinamica. Tale memoria non è stata deallocata. Il puntatore a tale memoria è andato perso: memory leak. Tale memoria verrà deallocata solo al termine del programma. Questo potrebbe essere un problema, ad esempio: se il programma è scritto per restare in attesa e non terminare. se si presentano molte situazioni di questo tipo la memoria potrebbe esaurirsi. Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 9 / 10
14 Errore di programmazione: perdita dei puntatori Tenere sempre traccia della memoria dinamica utilizzata. int x =5; int * p = new int ; p=&x; Come faccio ad accedere alla memoria dinamica allocata? È stata allocata una certa quantità di memoria dinamica. Tale memoria non è stata deallocata. Il puntatore a tale memoria è andato perso: memory leak. Tale memoria verrà deallocata solo al termine del programma. Questo potrebbe essere un problema, ad esempio: se il programma è scritto per restare in attesa e non terminare. se si presentano molte situazioni di questo tipo la memoria potrebbe esaurirsi. Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 9 / 10
15 Esempio Esempio Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 10 / 10
Gestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - [email protected] A pessimistic programmer sees the array as half empty.
La gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso
Fondamenti di Informatica T. Linguaggio C: i puntatori
Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme
Linguaggio C: puntatori
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: puntatori La presente dispensa e da utilizzarsi ai soli fini didattici previa
Lezione 9 programmazione in Java Classi come contenitori
Lezione 9 programmazione in Java Classi come contenitori Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Gestione della Memoria Dati dinamici e statici Il passaggio
L Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania [email protected] http://www.diit.unict.it/users/mpalesi Sommario Questo documento
Allocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
Il linguaggio C. Puntatori e Array
Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si
Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Proff. Francesco Cutugno e Luigi Lamberti 2009 Cenni sui Processi Si definisce Programma un insieme di Istruzioni destinate
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it
Programmazione ad oggetti
Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.
Strutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
Linguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini
Primi concetti di Java Lorenzo Bettini OO puro Java è object-oriented puro Non come il C+ + (OO ibrido) Per compatibilità col C Ogni cosa è un oggetto Gli oggetti si manipolano tramite riferimenti String
Allocazione dinamica. VLA, malloc() e dintorni
Allocazione dinamica VLA, malloc() e dintorni Rappresentazione di sequenze... È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse: Es: sequenza
Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
Allocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese
I PUNTATORI E LE STRUTTURE DATI DINAMICHE Cosimo Laneve/Ivan Lanese argomenti 1. dichiarazioni di puntatori 2. le operazione su puntatori (NULL, new, delete, &, *) 3. puntatori passati come parametri e
Gestione della Memoria
Gestione della Memoria Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 27 apr, 2016 Sommario 1 Tecniche di gestione Progetto della gestione
Le risorse. Alcune definizioni
Le risorse Dicesi risorsa un qualunque oggetto, fisico o logico, di cui un processo necessita per portare a termine la sua evoluzione. Poiché un processo evolve eseguendo istruzioni (procedure), una risorsa
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Corso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Costruttori di copia, funzioni di accesso e variabili static aa 2008/2009 Claudio De Stefano Claudio De Stefano - Corso di Programmazione ad Oggetti - aa 2008/2009 1
Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays
Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una
Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
I puntatori e l allocazione dinamica di memoria. Esercizi risolti
I puntatori e l allocazione dinamica di memoria Esercizi risolti 1 Esercizio Si vuole realizzare un tipo struct, utilizzato per informazioni su operazioni di vendita, avente i seguenti campi: codice: numero
Array e puntatori in C
Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
Primi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)
ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente
Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti
Lezione 6 Visibilità degli identificatori e tempo di vita degli oggetti Programmazione I Paolo Valente - 2009/2010 Ripasso dichiarazioni oggetti Finora abbiamo scritto le dichiarazioni di variabili e costanti
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti
Architettura dei calcolatori e sistemi operativi. M2 Organizzazione della memoria virtuale Struttura dello spazio virtuale kernel e utente
Architettura dei calcolatori e sistemi operativi M2 Organizzazione della memoria virtuale Struttura dello spazio virtuale kernel e utente 18.01.2015 Architettura Intel x64 Lo spazio di indirizzamento virtuale
18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
Stringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
Programmazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto
Le operazioni di allocazione e deallocazione sono a carico del sistema.
Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione
Corso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.
Excel VBA VBA Visual Basic for Application VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. 2 Prima di iniziare. Che cos è una variabile?
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 3 - Array Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
