FUNZIONI: IL MODELLO A RUN-TIME

Documenti analoghi
FUNZIONI: IL MODELLO A RUN-TIME!

FUNZIONI: IL MODELLO A RUN-TIME

LA RICORSIONE LA RICORSIONE

Record di Attivazione Cenni sulla ricorsione

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Esempio: il fattoriale di un numero fact(n) = n! n!: Z! N n! vale 1 se n " 0 n! vale n*(n-1)! se n > 0. Codifica:

Record di Attivazione

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Il linguaggio C Il modello a run-time

Il linguaggio C Il modello a run-time

20. Gestione della memoria. Andrea Marongiu Paolo Valente

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

Parametri Formali di una Funzione e Record di Attivazione

LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

FUNZIONI FUNZIONI COME COMPONENTI SW

Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)

FUNZIONI FUNZIONI COME COMPONENTI SW

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

Una funzione riceve dati di ingresso in corrispondenza ai parametri

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

Operativamente, risolvere un problema con un approccio ricorsivo comporta

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

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

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

Esempi (pseudo-c):! float f(){ * sin(0.75); } float f1(int x) { 2 + x * sin(0.75); } Esempio

Architetture dei Calcolatori

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

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO

Funzioni, Stack e Visibilità delle Variabili in C

Ottenere una modifica del parametro attuale

Gestione della memoria

Assembly (3): le procedure

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

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

Funzioni, Stack e Visibilità delle Variabili in C

Istruzioni di controllo del flusso

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in

Corso di Informatica Modulo T3 2 Ambiente locale e globale

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri

Convenzioni di chiamata a procedure

Spazio di indirizzamento virtuale

Assembly (3): le procedure

La Ricorsione. Carla Binucci e Walter Didimo

dare un nome a una istruzione non denota un valore, quindi non c è tipo di ritorno void

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 5 Ing. Gian Enrico Conti Dott. Michele Zanella

ESERCIZIO: Analisi di un programma. Dato il seguente programma C:

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

Assembly IV Le procedure

void p(int x) { float y = x * sin(0.75); printf( %f, y); }

Gestione della memoria

Pag. 1. Il Nucleo del sistema operativo (la gestione dei processi)

Funzioni di libreria. sqrt (radice. quadrata), ecc #include <stdio.h> #include <math.h> main() { float a, b, c;

Funzioni in C. Architetture multi-componente

La gestione della memoria. Gestione della memoria. Uso della Memoria RAM

Assembly MIPS: le procedure

Istruzioni di trasferimento dati

Gestione della memoria

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

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

Sommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano

Il linguaggio assembly

La Gestione della Memoria. Carla Binucci e Walter Didimo

Assembly V: Procedure annidate e recursive

Convenzioni per la chiamata a procedure

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C

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

Una procedura permette di" void p(int x) { x = x * 2; printf( %d, x); }

Procedure. Una procedura permette di dare un nome a una istruzione rendendola parametrica non denota un valore, quindi non c è tipo di ritorno void

Il principio di induzione. La Ricorsione. Il fattoriale: iterativo. Il fattoriale: ricorsivo. P (0) P (n) P (n + 1) per ogni n

Gestione della Memoria

Fetch Decode Execute Program Counter controllare esegue prossima

Il linguaggio C Funzioni e procedure

Gestione dei sottoprogrammi. temporaneo passaggio del controllo dal programma in esecuzione ad un sottoprogramma

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri

Informatica 3. LEZIONE 4: Semantica operazionale. Modulo 1: Strutture a blocchi Modulo 2: Comportamenti dinamici

Procedure e variabili locali. Corso di Architettura degli Elaboratori. Uno stack anche per i calcoli. Lo stack di esecuzione

Università degli Studi di Cassino

Una procedura permette di#! dare un nome a una istruzione#! rendendola parametrica!! non denota un valore, quindi " non c#è tipo di ritorno!

Università degli Studi di Cassino e del Lazio Meridionale

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Comunicazioni di servizio. I metodi - II. Dove siamo. Struttura programma Java. Visibilità (scope) Oggi. Stefano Mizzaro 1

Le procedure. Architetture dei Calcolatori (Lettere. Le procedure (3) Le procedure (2)

Corso di Linguaggi di Programmazione. Organizzazione di un processo in memoria (1)

Ricorsione in C. slides credit Prof. Paolo Romano

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

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

Procedure: esempi. Esempi: ricorsione fattoriale Fibonacci ordinamenti

! Intro metodi/sottoprogrammi. ! Definizione (intestazione e corpo) e uso. ! Parametri formali e attuali, associazione

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

Transcript:

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 effettua il passaggio dei parametri si trasferisce il controllo al servitore si esegue il codice della funzione IL MODELLO A RUN-TIME: ENVIRONMENT La definizione di una funzione introduce un nuovo binding nell environment environment in cui la funzione è definita (C: global environment) Al momento dell invocazione,, si crea un nuovo environment viene creata una struttura dati che contiene i binding dei parametri e degli identificatori definiti localmente alla funzione detta

È il mondo della funzione : contiene tutto ciò che ne caratterizza l esistenza i parametri ricevuti le variabili locali l indirizzo di ritorno (Return address RA) che indica il punto a cui tornare (nel codice del cliente) al termine della funzione, per permettere al cliente di proseguire una volta che la funzione termina un collegamento al record di attivazione del cliente (Link Dinamico DL) Return address Link dinamico Parametro Parametro 2... Variabile locale Dimensione del record (non fissa) Variabile locale 2... 2

Rappresenta il mondo della funzione : nasce e muore con essa è creato al momento della invocazione di una funzione permane per tutto il tempo in cui la funzione è in esecuzione è distrutto (deallocato) al termine dell esecuzione della funzione stessa. Ad ogni chiamata di funzione viene creato un nuovo record, specifico per quella chiamata di quella funzione La dimensione del record di attivazione varia da una funzione all altra per una data funzione, è fissa e calcolabile a priori Funzioni che chiamano altre funzioni danno luogo a una sequenza di record di attivazione allocati secondo l ordine delle chiamate deallocati in ordine inverso La sequenza dei link dinamici costituisce la cosiddetta catena dinamica, che rappresenta la storia delle attivazioni ( chi ha chiamato chi ) 3

Per catturare la semantica delle chiamate annidate (una funzione che chiama un altra funzione che...), l area di memoria in cui vengono allocati i record di attivazione deve essere gestita come una pila STACK Una struttura dati gestita con politica LIFO (Last In, First Out - l ultimo a entrare è il primo a uscire) Normalmente lo STACK dei record di attivazione si disegna nel modo seguente sequenza attivazioni Quindi, se la funzione A chiama la funzione B lo stack evolve nel modo seguente A A chiama B e passa il controllo a B A B poi B finisce e il controllo torna ad A A 4

Il valore di ritorno calcolato dalla funzione può essere restituito al cliente in due modi: inserendo un apposito slot nel record di attivazione il cliente deve copiarsi il risultato da qualche parte prima che il record venga distrutto tramite un registro della CPU soluzione più semplice ed efficiente, privilegiata ovunque possibile. ESEMPIO DI CHIAMATE ANNIDATE Programma: int R(int A) { return A+; } int Q(int x) { return R(x); } int P(void) { int a=0; return Q(a); } void () { int x = P(); } Sequenza chiamate: S.O. P() Q() R() 5

ESEMPIO DI CHIAMATE ANNIDATE Sequenza chiamate: S.O. P() Q() R() sequenza attivazioni P Q R ESEMPIO: FATTORIALE int fact(int n) { if n<=0 return ; else return n*fact(n-); } void (){ int x, y; x = 2; y = fact(x); } NOTA: Anche il ()e una funzione 6

ESEMPIO: FATTORIALE Situazione all inizio dell esecuzione del () Il () chiama chiama fact() fact() chiama fact(0) fact() fact() fact(0) ESEMPIO: FATTORIALE fact(0) termina restituendo il valore. Il controllo torna a fact() fact() effettua la moltiplicazione e termina restituendo il valore. Il controllo torna a fact() effettua la moltiplicazione e termina restituendo il valore 2. Il controllo torna al () fact() fact(0) fact() 2 7

IN DETTAGLIO 2 x 2 y RA n 2 RA n DL DL fact() SI RICORDA CHE nei processi computazionali ricorsivi ogni funzione che effettua una chiamata ricorsiva deve aspettare il risultato del servitore per effettuare operazioni su questo e poi può terminare. RA n 0 DL fact(0) REALIZZARE IL PASSAGGIO PER RIFERIMENTO IN C void scambia(int* a, int* b) { int t; t = *a; *a = *b; *b = t; } void (){ int y = 5, x = 33; scambia(&x, &y); } 8

ESEMPIO: Caso del passaggio per valore: Non modificati dalla procedura Copia di x e y x 33 y 5 RA DL a 33 5 b 5 33 t 33 scambia(3,5) ESEMPIO: Caso del passaggio per riferimento: Modificati dalla procedura x 33 5 y 5 33 α β Indirizzo di x e y RA DL a α b β t 33 scambia(3,5) 9