Allocazione Dinamica della Memoria

Documenti analoghi
Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria

Gestione dinamica della memoria

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

La gestione della memoria dinamica Heap

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

Introduzione al C. Unità Gestione Dinamica della Memoria

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Corso di Fondamenti di Informatica

Fondamenti di Informatica T. Linguaggio C: i puntatori

Operatore di indirizzo

Strutture Dati. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Strutture Dati 1 / 16

Linguaggio C: puntatori

Lezione 9 programmazione in Java Classi come contenitori

L Allocazione Dinamica della Memoria

Allocazione dinamica della memoria

Il linguaggio C. Puntatori e Array

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

Ottenere una modifica del parametro attuale

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

L'allocazione dinamica della memoria

Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Programmazione (imperativa)

Allocazione Dinamica della Memoria

Struct, enum, Puntatori e Array dinamici

Allocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica

Puntatori in C Lucidi della Pof.ssa Pazienza

Esercizi Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Funzioni, Stack e Visibilità delle Variabili in C

Il linguaggio C. Puntatori e dintorni

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione ad oggetti

cap.6 del testo a cosa servono i tipi nei linguaggi di programmazione cos è un linguaggio type safe

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Passaggio parametri puntatore

Strutture dati e loro organizzazione. Gabriella Trucco

Linguaggio C - sezione dichiarativa: costanti e variabili

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

Il C nel C++: Funzioni

Allocazione dinamica. VLA, malloc() e dintorni

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Introduzione ai puntatori in C Definizione

Strutturare il codice: sottoprogrammi

Allocazione dinamica della memoria - riepilogo

Prof.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap

Esercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese

Puntatori. Fondamenti di Programmazione

Gestione della Memoria

Laboratorio di Informatica

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Le risorse. Alcune definizioni

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso di Programmazione ad Oggetti

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays

Operazioni numeriche - Input

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

File binari, Operazioni sui File binari, Allocazione dinamica della memoria

Array e puntatori in C

Programmazione I - Laboratorio

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H

Directory. Le directory unix sono file.

1 Il Paradigma ad Oggetti

Primi passi col linguaggio C

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Classi e oggetti Seconda parte. Oggetti dinamici

Programmazione I - Laboratorio

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

Architettura dei calcolatori e sistemi operativi. M2 Organizzazione della memoria virtuale Struttura dello spazio virtuale kernel e utente

Introduzione alle stringhe e algoritmi collegati

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Finestre di dialogo. Corso di Laboratorio di Programmazione Web. Controllo dell input e window.alert. prompt di stringhe!

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 24 Ottobre 2014

Stringhe e allocazione dinamica della memoria

Introduzione al C. Tipi derivati

Programmazione in Java (I modulo)

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

I puntatori (richiamo)

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Concetti base programmazione. Antonio Gallo

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Parte 4. Liste. P. Picasso Guernica, AA. 2015/16

Gestione della memoria

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

FRAMEWORK PER L'ESECUZIONE DI APPLICAZIONI ASSEMBLY SUL MODELLO VERILOG DI UN SISTEMA DI ELABORAZIONE BASATO SUL PROCESSORE emips-sc

Programmazione I - Laboratorio

Transcript:

Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10

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

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

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

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

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

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

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

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

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

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

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

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

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

Esempio Esempio Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 10 / 10