La Gestione della Memoria. Carla Binucci e Walter Didimo

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "La Gestione della Memoria. Carla Binucci e Walter Didimo"

Transcript

1 La Gestione della Memoria Carla Binucci e Walter Didimo

2 Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina astratto) l interpretazione del bytecode Java da parte della macchina virtuale Java () Programma java bytecode Java interprete Java per pentium interprete Java per sparc (X.java) compilatore Java (X.class) indipendente dalla piattaforma interprete Java per risc

3 Modello RunTime Vogliamo descrivere alcuni aspetti della gestione della memoria nell esecuzione di applicazioni Java l esecuzione di una applicazione richiede la gestione della memoria associata alle classi, agli oggetti e ai metodi e costruttori Studiamo il modello runtime (cioè il modello del tempo di esecuzione) per l invocazione di metodi e costruttori e per la gestione di classi e oggetti ignoriamo molte altre problematiche circa l esecuzione di un applicazione

4 Gestione della Memoria La gestione della memoria è affidata alla il sistema operativo assegna memoria alla affinché possa gestire classi, oggetti e l esecuzione di metodi e costruttori La gestione della memoria avviene per aree di memoria ciascuna area di memoria serve a memorizzare variabili e/o altre informazioni un area di memoria può essere destinata a una classe, a un oggetto, all esecuzione di un metodo (d istanza o di classe) o all esecuzione di un costruttore

5 Aree di Memoria Le aree di memoria sono assegnate in modo dinamico allocare un area di memoria significa riservare una porzione di memoria per uno scopo specifico deallocare un area di memoria significa liberare quella porzione di memoria, affinché possa essere usata per altri scopi

6 Esecuzione di metodi il modello di gestione della memoria per l esecuzione dei metodi consiste nella gestione di aree di memoria chiamate record di attivazione ciascun record di attivazione ha lo scopo di memorizzare le informazioni necessarie a una singola esecuzione di un metodo i diversi record di attivazione necessari per l esecuzione di un programma sono gestiti mediante una struttura di dati a pila, chiamata record di attivazione m m1

7 Pila di attivazione La è una sequenza ordinata di record di attivazione: ogni volta che un metodo o costruttore deve essere eseguito, viene allocato un nuovo record di attivazione, posto in cima alla pila il metodo o costruttore correntemente in esecuzione è quello il cui record di attivazione è in cima alla pila quando un metodo o costruttore termina, il suo record di attivazione viene deallocato e rimosso dalla pila

8 Record di attivazione Un record di attivazione contiene le seguenti informazioni: : riferimento all oggetto ricevente se il metodo è di istanza, o alla classe ricevente se il metodo è di classe : informazioni sull istruzione che ha invocato il metodo - fa sempre riferimento al record di attivazione sottostante variabili locali m x istr. in m1 Classe m1..

9 Un esempio - Quadruplo Consideriamo la seguente applicazione: class Quadruplo { public static int somma(int h, int k) { int s; // somma, 1 s = h+k; // somma, return s; // somma, 3 } public static int doppio(int n) { int d; // doppio, 1 d = somma(n,n); // doppio, return d; // doppio, 3 } public static void main(string[] args) { int a, b, c; // main, 1 a = ; // main, b = doppio(a); // b = // main, 3 c = doppio(b); // c = 8 // main, } }

10 Quadruplo t=0 Vogliamo descrivere l esecuzione dell applicazione Quadruplo concentrandoci sull allocazione e deallocazione dei record di attivazione nella pila di attivazione Nell istante t=0 la alloca un area di memoria per la classe Quadruplo l area di memoria per una classe contiene, tra l altro, le variabili di classe (in questo caso nessuna) Quadruplo

11 Quadruplo t=1 Nell istante t=1 la avvia l esecuzione della classe Quadruplo, invocando il metodo di classe main in questo istante viene allocato il record di attivazione per l invocazione del metodo main main a b c Quadruplo

12 Quadruplo t= Nell istante t= viene eseguita l assegnazione a= il valore della variabile locale a viene dunque aggiornato nel record di attivazione del main main a b c Quadruplo

13 Quadruplo t=3 Nell istante t=3 viene invocato il metodo doppio con parametro attuale a subito dopo aver allocato il record di attivazione per il metodo doppio, la copia il valore dei parametri attuali nei corrispondenti parametri formali doppio main n d a b c main, 3 Quadruplo

14 Quadruplo t= Nell istante t= viene invocato il metodo somma con parametri attuali n e n somma h k s doppio, doppio main n d a b c main, 3 Quadruplo

15 Quadruplo t=5 Nell istante t=5 viene eseguita l istruzione s=h+k somma h k s doppio, doppio main n d a b c main, 3 Quadruplo

16 Quadruplo t=6 Nell istante t=6 viene eseguita l istruzione return s l invocazione di somma termina in base al di somma viene determinata la prossima istruzione da eseguire la prossima istruzione da eseguire è l assegnazione del valore restituito da somma alla variabile d, nel metodo doppio il record di attivazione di questa invocazione di somma viene rimosso

17 Quadruplo t=6 Nell istante t=6 viene eseguita l istruzione return s somma doppio main h k s n d a b c doppio, main, 3 Quadruplo

18 Quadruplo t=7 Nell istante t=7 viene eseguita l istruzione return d l invocazione di doppio termina ed il suo record di attivazione viene rimosso la prossima istruzione da eseguire (nel main) è l assegnazione del valore restituito da doppio a b doppio main n d a b c main, 3 Quadruplo

19 Quadruplo t=8 Nell istante t=8 viene invocato il metodo doppio con parametro attuale b viene dunque allocato un nuovo record di attivazione per la nuova invocazione del metodo doppio doppio main n d a b c main, Quadruplo

20 Quadruplo t=9 Nell istante t=9 viene invocato il metodo somma con parametri attuali n e n somma h k s doppio, doppio main n d a b c main, Quadruplo

21 Quadruplo t=10 Nell istante t=10 viene eseguita l assegnazione s=h+k somma h k s doppio, 8 doppio main n d a b c main, Quadruplo

22 Quadruplo t=11 Nell istante t=11 viene eseguita l istruzione return s l invocazione di somma termina somma doppio main h k s n d a b c doppio, 8 main, 8 8 Quadruplo

23 Quadruplo t=1 Nell istante t=1 viene eseguita l istruzione return d l invocazione di doppio termina doppio main n d a b c main, Quadruplo

24 Quadruplo t=13 Nell istante t=13 termina anche il metodo main la si svuota e l applicazione termina main a b c 8 Quadruplo

25 Gestione degli Oggetti - heap Il modello runtime prevede una gestione delle aree di memoria per gli oggetti diversa da quella per l esecuzione di metodi e costruttori le aree di memoria per gli oggetti e per le classi sono allocate in una zona di memoria chiamata heap (mucchio), perché l ordine di tali aree non è rilevante m ClasseA m1 heap

26 Gestione degli Oggetti L area di memoria per un oggetto viene allocata solo al momento della creazione dell oggetto, e deallocata quando l oggetto non verrà più utilizzato nel programma c1:classea ClasseA heap

27 Un altro esempio - ProvaComplesso Consideriamo la seguente applicazione che crea e usa oggetti della classe Complesso: class ProvaComplesso { public static void main(string[] args) { Complesso x, y; x = new Complesso(3.0,.0); // main, 1 y = new Complesso(-3.0,.0); // main, x.sommati(y); // main, 3 } } Vogliamo descrivere l esecuzione dell applicazione ProvaComplesso concentrandoci sulla allocazione e deallocazione di oggetti nello heap, mostrando anche la

28 La classe Complesso Ecco il codice del costruttore e del metodo sommati della classe Complesso: class Complesso {... /** crea un nuovo Complesso */ public Complesso(double re, double im) { this.re = re; this.im = im; }... /** si somma a un altro Complesso */ public void sommati(complesso altro) { this.re += altro.re; this.im += altro.im; }... }

29 Il Diagramma Sequenza Ecco il diagramma sequenza per ProvaComplesso: ProvaComplesso static main(...) t=0... t=1 main(...) x = new Complesso(3.,.) t= t=3 y = new Complesso(-3.,.) t= t=5 c1.sommati(c) t=6 t=7 c1: Complesso re = 3.0 im =.0 esecuzione del costruttore... esecuzione del metodo sommati c : Complesso re = -3.0 im =.0 esecuzione del costruttore t=8

30 ProvaComplesso t=0 Nell istante t=0 la carica in memoria la classe ProvaComplesso, allocando un area di memoria nello heap nessun metodo è in esecuzione nessun oggetto è stato creato ProvaComplesso heap

31 ProvaComplesso t=1 In t=1 viene avviata l esecuzione della classe ProvaComplesso, invocandone il metodo di classe main vengono allocate le variabili locali x e y di main di tipo Complesso essendo stata chiamata in causa, viene allocata un area di memoria per la classe Complesso main x y Complesso ProvaComplesso heap

32 ProvaComplesso t= In t= viene eseguita l istruzione x = new Complesso(3.0,.0) viene creato un primo oggetto Complesso - c1 la creazione di c1 richiede l allocazione di un area di memoria nello heap per memorizzarne, tra l altro, le variabili d istanza re e im viene invocato il costruttore di Complesso viene creato un record di attivazione per il costruttore Costr main main,1 re 3 im x y c1 : Complesso re im Complesso ProvaComplesso heap

33 ProvaComplesso t=3 In t=3, dopo che è stato eseguito il corpo del costruttore, il costruttore viene rimosso dalla viene poi eseguita l assegnazione a x Costr main main,1 re 3 im x y c1 : Complesso re im 3 Complesso ProvaComplesso heap

34 ProvaComplesso t= In t= viene eseguita l istruzione y = new Complesso(-3.0.0,,.0) viene creato un altro oggetto Complesso - c e allocata un area di memoria nello heap per c viene invocato il costruttore di Complesso e creato un record di attivazione per il costruttore c : Complesso re im Costr main main, re -3 im x y c1 : Complesso re im 3 Complesso ProvaComplesso heap

35 ProvaComplesso t=5 In t=5, dopo che il costruttore è stato eseguito, il suo recordo di attivazione viene rimosso dalla pila viene poi eseguita l assegnazione a y c : Complesso re im -3 Costr main main, re -3 im x y c1 : Complesso re im 3 Complesso ProvaComplesso heap

36 ProvaComplesso t=6 In t=6 viene eseguita l istruzione x.sommati(y) viene creato un record di attivazione per sommati c : Complesso re im -3 c1 : Complesso sommati main altro x y main,3 re im 3 Complesso ProvaComplesso heap

37 ProvaComplesso t=7 In t=7, dopo che il metodo sommati è stato eseguito, il suo record viene rimosso dalla osserva che l esecuzione di sommati ha modificato lo stato dell oggetto c1 c : Complesso re im -3 c1 : Complesso sommati main altro x y main,3 re im 0 6 Complesso ProvaComplesso heap

38 ProvaComplesso t=8 In t=8 il metodo main termina ed il suo record è rimosso dalla non essendo referenziati altrove, gli oggetti c1 e c verranno deallocati c : Complesso re im c1 : Complesso re im main x y Complesso ProvaComplesso heap

39 Vita di oggetti, classi e variabili L allocazione di aree di memoria è dinamica e temporanea Un area di memoria è considerata allocata fintanto che il rispettivo proprietario è vivo parliamo di vita di un oggetto o classe vita di una variabile

40 Vita di un oggetto inizia quando l oggetto viene creato con new termina quando l oggetto non è più accessibile un oggetto è accessibile se esiste una variabile che direttamente o indirettamente lo referenzia un oggetto non accessibile, non ha più nessuna utilità e la può decidere di distruggerlo l individuazione e la rimozione di oggetti inaccessibili si chiama garbage collection (raccolta della spazzatura) e viene svolta automaticamente dalla

41 Vita di una variabile d istanzad coincide con la vita dell oggetto a cui appartiene termina quando l oggetto non è più accessibile una variabile d istanza di un oggetto viene allocata (nello heap) quando l oggetto viene creato una variabile d istanza viene deallocata quando l oggetto viene rimosso

42 Vita di una classe inizia quando la classe viene utilizzata per la prima volta dall applicazione in esecuzione la classe viene caricata in memoria dalla l area di memoria riservata per la classe viene deallocata quando l applicazione termina

43 Vita di una variabile di classe coincide con la vita della classe a cui appartiene una variabile di classe viene allocata nello heap quando la classe viene caricata l area di memoria della classe viene deallocata quando termina l esecuzione dell applicazione

44 Vita di una variabile locale La vita di una variabile locale (o di un parametro formale) a un metodo o costruttore coincide con il tempo di esecuzione del metodo o costruttore viene allocata quando il metodo o costruttore viene invocato l allocazione avviene nella, nell ambito del record di attivazione associato all esecuzione del metodo o costruttore viene deallocata quando il metodo o costruttore termina

45 Glossario dei termini principali Termine Modello Runtime Area di memoria Record di attivazione Pila di attivazione Heap Vita di un oggetto, di una classe e di una variabile Garbage collection Significato Il modello al tempo di esecuzione dei programmi. Nel caso dei linguaggi di programmazione ad oggetti come Java, il modello runtime consiste nelle modalità di gestione degli oggetti da parte del calcolatore Gruppo consecutivo di byte. Un area di memoria serve a memorizzare variabili e/o altre informazioni. Le aree di memoria vengono gestite dinamicamente mediante allocazione e deallocazione Area di memoria destinata a memorizzare le informazioni necessarie ad una singola esecuzione di un metodo. Sequenza ordinata dei record di attivazione necessari per l esecuzione di un programma Zona di memoria in cui vengono allocate, senza seguire alcun ordine significativo, le aree di memoria per le classi e/o gli oggetti. Intervallo di tempo in cui rimane allocata un area di memoria rispettivamente per un oggetto, una classe e una variabile Processo di ricerca e distruzione degli oggetti inaccessibili, ovvero di quegli oggetti che non sono più referenziati

Gestione della memoria in Java. Emilio Di Giacomo e Walter Didimo

Gestione della memoria in Java. Emilio Di Giacomo e Walter Didimo Gestione della memoria in Java Emilio Di Giacomo e Walter Didimo Gestione della memoria In questa lezione descriveremo un modello runtime (cioè a tempo di esecuzione) di gestione della memoria in Java

Dettagli

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi Gli oggetti Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-149 Torino Ogni

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Dettagli

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori

Dettagli

3) Descrivere l architettura di un elaboratore tramite astrazione a livelli

3) Descrivere l architettura di un elaboratore tramite astrazione a livelli Di seguito sono elencati una serie di domande tipo esonero ; i quiz vogliono dare un sistema di autovalutazione e di confronto allo studente che deve prepararsi alla prova di metà corso. Il numero e l

Dettagli

Spazio di indirizzamento virtuale

Spazio di indirizzamento virtuale Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - pietro.dilena@unibo.it // The function name says it all int stack_overflow (){

Dettagli

Architetture dei Calcolatori

Architetture dei Calcolatori Architetture dei Calcolatori Lezione 8 -- 01/12/2011 Procedure Emiliano Casalicchio emiliano.casalicchio@uniroma2.it Create da: F. Lo Presti Modificate da: E.Casalicchio Le procedure q In ogni linguaggio

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

La Ricorsione. Carla Binucci e Walter Didimo

La Ricorsione. Carla Binucci e Walter Didimo La Ricorsione Carla Binucci e Walter Didimo Definizione induttiva di funzioni Una funzione definita in modo induttivo è una funzione definita in termini di sé stessa ad esempio la funzione f(n) = n! (fattoriale

Dettagli

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010. Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010 Sommario 1 Gestione della Memoria 2/24 Programmazione II Lezione 7 9/11/2010

Dettagli

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;

Dettagli

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

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria di Cassino e del Lazio Meridionale Corso di Informatica Allocazione dinamica di memoria Anno Accademico 2015/2016 Francesco Tortorella Allocazione dinamica di memoria Finora abbiamo considerato variabili

Dettagli

Introduzione alla Programmazione in Java attraverso un esempio commentato

Introduzione alla Programmazione in Java attraverso un esempio commentato Corso di Studi in Informatica Programmazione 1 corso B prof. Elio Giovannetti Introduzione alla Programmazione in Java attraverso un esempio commentato Programmazione 1 B - a.a. 2002-03 53 Modello di memoria

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi

Dettagli

Allocazione Dinamica della Memoria

Allocazione Dinamica della Memoria 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

Dettagli

Record di Attivazione

Record di Attivazione Record di Attivazione La macchina virtuale Record di attivazione di funzioni e procedure Record di attivazione 1 LA MACCHINA VIRTUALE DEL C MODELLO A TEMPO DI ESECUZIONE Aree di memoria: Area del codice

Dettagli

Uso di metodi statici. Walter Didimo

Uso di metodi statici. Walter Didimo Uso di metodi statici Walter Didimo Metodi di istanza Fino ad ora abbiamo imparato a creare oggetti e ad invocare metodi su tali oggetti i metodi venivano eseguiti dagli oggetti un metodo invocato su un

Dettagli

Esonero di Informatica I. Ingegneria Medica

Esonero di Informatica I. Ingegneria Medica Di seguito sono elencati una serie di domande tipo esonero ; i quiz vogliono dare un sistema di autovalutazione e di confronto allo studente che deve prepararsi alla prova di metà corso. Il numero e l

Dettagli

20. Gestione della memoria. Andrea Marongiu Paolo Valente

20. Gestione della memoria. Andrea Marongiu Paolo Valente 20. Gestione della memoria Andrea Marongiu (andrea.marongiu@unimore.it) Paolo Valente Classi di memorizzazione Stiamo per vedere la classificazione di un oggetto in funzione del suo tempo di vita In particolare,

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Introduzione all uso degli oggetti in Java (parte I) Walter Didimo

Introduzione all uso degli oggetti in Java (parte I) Walter Didimo Introduzione all uso degli oggetti in Java (parte I) Walter Didimo Java Java è un linguaggio di programmazione orientato agli oggetti; nel seguito vedremo: come sono strutturati i programmi Java come si

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

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)

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Linguaggi ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione. I principali linguaggi ad oggetti. Programmazione ad oggetti.

Linguaggi ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione. I principali linguaggi ad oggetti. Programmazione ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione Linguaggi ad oggetti I linguaggi di programmazione ad oggetti consentono di applicare metodologie di sviluppo di programmi "object oriented", ossia

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T4 A1 Allocazione dinamica 1 Prerequisiti Programmazione elementare Programmazione ad oggetti Dati semplici e strutturati 2 1 Introduzione In molti problemi capita di non conoscere

Dettagli

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

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente ! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili

Dettagli

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Dettagli

Assembly (3): le procedure

Assembly (3): le procedure Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 13 1/23 Chiamata

Dettagli

Introduzione ai puntatori

Introduzione ai puntatori Introduzione ai puntatori Algoritmicamente November 19, 2009 http://algoritmicamente.wordpress.com/ 1 Concetti fondamentali Nei linguaggi quali C, C++, il concetto e l'uso dei puntatori è estremamente

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Strutture dati nel supporto a run time

Strutture dati nel supporto a run time Strutture dati nel supporto a run time 1 Entità presenti quando un programma va in esecuzione programmi d utente (compilati) routines del supporto interprete I/O, librerie, routines per la gestione delle

Dettagli

FUNZIONI: IL MODELLO A RUN-TIME!

FUNZIONI: IL MODELLO A RUN-TIME! FUNZIONI: IL MODELLO A RUN-TIME! Ogni volta che viene invocata una funzione si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri e per le variabili locali

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

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

Dettagli

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto Usare e costruire oggetti Variabili e Oggetti Lo spazio di memoria di Java Le API di Java Gli oggetti sono entità di un programma che si possono manipolare invocando i metodi System.out oggetto della classe

Dettagli

Gestione dinamica della memoria

Gestione dinamica della memoria Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.

Dettagli

Java Gli array. Array

Java Gli array. Array Java Gli array 1 Gli array In generale un array è una sequenza di locazioni di memoria, che contengono entità dello stesso tipo, e a cui si può fare riferimento con un nome comune Le entità che compongono

Dettagli

Programmazione ad oggetti

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.

Dettagli

Parametri Formali di una Funzione e Record di Attivazione

Parametri Formali di una Funzione e Record di Attivazione Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Memoria stack ed heap (1) L'area di memoria stack é quella in cui viene allocato un pacchetto di dati non appena l'esecuzione passa dal programma chiamante a una funzione.

Dettagli

PROGRAMMAZIONE 2 5. Dynamic dispatch

PROGRAMMAZIONE 2 5. Dynamic dispatch PROGRAMMAZIONE 2 5. Dynamic dispatch PR2 2017-2018 1 Cosa significa? La dichiarazione di una variabile non determina in maniera univoca il >po dell oggeao che la variabile riferisce Cerchiamo di capire

Dettagli

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi

Dettagli

Assembly (3): le procedure

Assembly (3): le procedure Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano (Patterson-Hennessy:

Dettagli

Gestione della memoria

Gestione della memoria Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

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

Dettagli

FUNZIONI: IL MODELLO A RUN-TIME

FUNZIONI: IL MODELLO A RUN-TIME FUNZIONI: IL MODELLO A RUN-TIME Ogni volta che viene invocata una funzione si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri e per le variabili locali si

Dettagli

Introduzione al C. Unità Gestione Dinamica della Memoria

Introduzione al C. Unità Gestione Dinamica della Memoria Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità Gestione Dinamica della Memoria D. Bloisi, A. Pennisi, S. Peluso, S. Salza Gestione

Dettagli

Lezione 9 programmazione in Java Classi come contenitori

Lezione 9 programmazione in Java Classi come contenitori Lezione 9 programmazione in Java Classi come contenitori Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Gestione della Memoria Dati dinamici e statici Il passaggio

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Dettagli

Lezione 11 programmazione in Java. Anteprima. Gestione della memoria

Lezione 11 programmazione in Java. Anteprima. Gestione della memoria Lezione 11 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Gestione della Memoria Dati dinamici e statici Il passaggio di parametri

Dettagli

Programmazione in Java e gestione della grafica (I modulo) Lezione 2: Prime nozioni di Java

Programmazione in Java e gestione della grafica (I modulo) Lezione 2: Prime nozioni di Java Programmazione in Java e gestione della grafica (I modulo) Lezione 2: Prime nozioni di Java Programmi Un programma è un insieme di istruzioni che il computer deve seguire Usiamo programmi in continuazione

Dettagli

Assembly IV Le procedure

Assembly IV Le procedure rchitettura degli Elaboratori e delle Reti Lezione 14 ssembly IV Le procedure Proff.. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano (Patterson-Hennessy:

Dettagli

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Istruzioni: scrivere le risposte alle domande negli spazi presenti nel testo e riconsegnare

Dettagli

Strutture Dati Dinamiche

Strutture Dati Dinamiche Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Struttura

Dettagli

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente la loro esistenza deve essere prevista e dichiarata a priori Questo può rappresentare un problema

Dettagli

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

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

Dettagli

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

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

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Usare e costruire oggetti. Concetti Fondamentali. Interfaccia Pubblica di una. Application Program Interface

Usare e costruire oggetti. Concetti Fondamentali. Interfaccia Pubblica di una. Application Program Interface Concetti Fondamentali Interfaccia pubblica di una classe Le API di Java Lo spazio di memoria della macchina astratta Java Blocchi e sottoblocchi Variabili di frame e loro visibilità Importazioni di classi

Dettagli

Allocazione dinamica della memoria

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

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Oggetti e Classi Metodi Parametri Variabili di istanza Costruttori Esercizi Paradigma Object-Oriented Il paradigma OO

Dettagli

Corso di Informatica Modulo T3 2 Ambiente locale e globale

Corso di Informatica Modulo T3 2 Ambiente locale e globale Corso di Informatica Modulo T3 2 Ambiente locale e globale 1 Prerequisiti Struttura elementare della memoria Area dati e area programma Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità

Dettagli

Allocazione statica della memoria

Allocazione statica della memoria 2015 - Roberta Gerboni 1 2 Allocazione statica della memoria Cosa succede nella memoria del computer quando il un programma vengono dichiarate delle variabili? memoria Ad esempio: int main() 57 { int x=

Dettagli

Allocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t))

Allocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t)) Allocazione dinamica della memoria: malloc() In C è possibile allocare dinamicamente un area di memoria (ossia, durante l esecuzione di un programma) tramite le funzioni malloc() e calloc() (occorre includere

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Ingegneria del Software T. Garbage Collector

Ingegneria del Software T. Garbage Collector Garbage Collector Utilizzo di un oggetto In un ambiente object-oriented, ogni oggetto che deve essere utilizzato dal programma È descritto da un tipo Ha bisogno di un area di memoria dove memorizzare il

Dettagli

Introduzione alla programmazione. Walter Didimo

Introduzione alla programmazione. Walter Didimo Introduzione alla programmazione Walter Didimo Programmi Un programma è una frase (anche molto lunga) che descrive delle azioni che devono essere svolte da un calcolatore La frase deve essere dettagliata

Dettagli

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE Anno Accademico 2000-2001 Alberto Martelli Programmazione ad Oggetti Parte I Linguaggi ad oggetti (object oriented) I linguaggi di programmazione

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

15 April LABORATORIO 04 PROCEDURE STACK. CHIAMATA A PROCEDURE I. Frosio

15 April LABORATORIO 04 PROCEDURE STACK. CHIAMATA A PROCEDURE I. Frosio 15 April 2011 05 LABORATORIO 04 PROCEDURE STACK CHIAMATA A PROCEDURE I. Frosio 1 SOMMARIO Procedure Stack Chiamata a procedure 2 PERCHÈ LE PROCEDURE? 15 April 2011 Main Proc3 Proc2 Proc1 Programmazione

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA7 A1 Vector, Arrays e StringBuffer 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Algoritmi notevoli sul vettore 2 1 Introduzione In questa

Dettagli

L Allocazione Dinamica della Memoria

L Allocazione Dinamica della Memoria L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Dettagli

Realizzazione di Classi. Emilio Di Giacomo e Walter Didimo

Realizzazione di Classi. Emilio Di Giacomo e Walter Didimo Realizzazione di Classi Emilio Di Giacomo e Walter Didimo Definizioni di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione

Dettagli

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo Introduzione all uso degli oggetti in Java (parte II) Walter Didimo Esercizio all uso di oggetti Nel corso viene fornita una classe i cui oggetti permettono di leggere dati immessi dalla tastiera la classe

Dettagli

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Istruzioni: scrivere le risposte alle domande negli spazi presenti nel testo e riconsegnare

Dettagli

PROVA SCRITTA DI FONDAMENTI DI INFORMATICA L A 4 DICEMBRE 2003 Prof. Michela Milano COMPITO A

PROVA SCRITTA DI FONDAMENTI DI INFORMATICA L A 4 DICEMBRE 2003 Prof. Michela Milano COMPITO A PROVA SCRITTA DI FONDAMENTI DI INFORMATICA L A 4 DICEMBRE 2003 Prof. Michela Milano COMPITO A Esercizio 1 (punti 5) Si scriva una funzione ricorsiva int doppio(int a, int n); che calcoli il seguente valore:

Dettagli

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010.

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010. Programmazione II Lezione 9 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 16/11/2010 1/31 Programmazione II Lezione 9 16/11/2010 Sommario 1 Gestione della Memoria 2/31 Programmazione II Lezione 9 16/11/2010

Dettagli

Oggetti. Oggetti e occultamento delle informazioni. Definire oggetti. Oggetti. Definire oggetti la sintassi. Convenzione sugli identificatori

Oggetti. Oggetti e occultamento delle informazioni. Definire oggetti. Oggetti. Definire oggetti la sintassi. Convenzione sugli identificatori Oggetti Oggetti e occultamento delle informazioni Paolo Coppola Dipartimento di Matematica e Informatica Università degli Studi di Udine http://www.dimi.uniud.it/coppola/ coppola@dimi.uniud.it I metodi

Dettagli

Ottenere una modifica del parametro attuale

Ottenere una modifica del parametro attuale Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)

Dettagli

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Calcolatori Elettronici Lezione A4 Programmazione a Moduli Calcolatori Elettronici Lezione A4 Programmazione a Moduli Ing. Gestionale e delle Telecomunicazioni A.A. 2007/08 Gabriele Cecchetti Sommario Programmazione a moduli Programmi con linguaggi misti Tempo

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Il puntatore. Il puntatore

Il puntatore. Il puntatore Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una

Dettagli

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

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H Architettura dei calcolatori e sistemi operativi Sottoprogrammi e MIPS Espressioni algebriche Capitolo 2 P&H Sottoprogrammi Modello di chiamata Area di attivazione Calcolare un espressione algebrica 2

Dettagli

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea

Dettagli