Anno accademico 2010-2011 1 Le classi di memorizzazione.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Introduzione al linguaggio C++
Gestione della memoria centrale
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Recupero debito quarto anno Primo incontro
PUNTATORI Introduzione
PHP.
Algoritmi e Programmazione
Massa Laura Mela Enrica
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Introduzione al linguaggio C
Fondamenti di Informatica I a.a Il linguaggio C Utilizzo avanzato di array e puntatori Gli array multidimensionali Gli array di puntatori I.
Algoritmi in C++ (1) da completare
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Funzioni definite dall’utente
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Allocazione dinamica della memoria
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Approfondimento delle classi
Selezione (=scelta) con “if-else”
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Dichiarazioni e tipi predefiniti nel linguaggio C
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
Le funzioni.
Espressioni condizionali
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 6 (Deitel) I vettori Sommario Introduzione Vettori Dichiarazione di vettori 6.4.
CODIFICA Da flow-chart a C++.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Introduzione al linguaggio assembly del microprocessore a parte
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Unità Didattica 1 Linguaggio C
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
CORSO DI PROGRAMMAZIONE II Lezione 22
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Introduzione a Javascript
1 Gestione della Memoria. 2 Idealmente la memoria dovrebbe essere –grande –veloce –non volatile Gerarchia di memorie –Disco: capiente, lento, non volatile.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Sottoprogrammi e funzioni
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
Relazione sulle strutture dati Svolta da: Buccella Simone Strutture di dati Aree di memoria Puntatore numericibooleani alfabetici Statici dinamici Puntatori.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
1 1. Introduzione alla gestione della memoria 2. Swapping 3. Memoria virtuale 4. Implementazione 5. Algoritmi di sostituzione Gestione della Memoria.
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Anno accademico Le classi di memorizzazione

Anno accademico Sommario Le classi di memorizzazioneLe classi di memorizzazione Durata fissa e durata automatica Durata fissa e durata automatica Lambito di visibilità Lambito di visibilità

Anno accademico ambito di visibilitàscopeNel linguaggio C, viene offerta la possibilità di condividere variabili e di delimitare le porzioni di codice che sfruttano tali condivisioni, mediante la definizione dellambito di visibilità, o scope, delle variabili Lambito di visibilità è il termine tecnico che denota la parte del testo sorgente C in cui è attiva la dichiarazione di un nomeLambito di visibilità è il termine tecnico che denota la parte del testo sorgente C in cui è attiva la dichiarazione di un nome durataInoltre, le variabili hanno una durata, che descrive il lasso temporale di memorizzazione dei valori di una variabile: durata fissa Nel caso di variabili con durata fissa, i valori memorizzati vengono mantenuti anche allesterno dellambito di visibilità classe di memorizzazioneLe proprietà di visibilità e di durata individuano la classe di memorizzazione di una variabile Introduzione 1 3

Anno accademico j durata automatica ar durata fissa staticLa variabile j ha durata automatica, mentre ar ha durata fissa, perché dichiarata static : j A j viene automaticamente allocata memoria ogni volta che viene eseguito il blocco che la contiene (può avere indirizzi diversi per esecuzioni diverse del blocco di codice) ar ar viene allocato la prima volta che viene eseguito il blocco e mantiene lindirizzo originale per lintera esecuzione del programma void func() { int j; static int ar[] {1,2,3,4} … … … } jar visibilità a livello di blocco func()Le variabili j ed ar hanno entrambe visibilità a livello di blocco, perché definite allinterno di un blocco: pos- sono essere referenziate solo dalle istruzioni che appartengono al blocco (il corpo della funzione func() ) jar localiLe variabili j ed ar sono dette locali Esempio 4 Introduzione 2

Anno accademico durata fissa durata automaticaLe variabili con durata fissa sono permanenti, mentre le variabili con durata automatica sono allocate più volte durante lesecuzione del programma Ad una variabile fissa viene associata una locazione di memoria allinizio del programma, che non cambia fino al termine dello stesso Ad una variabile automatica viene allocata memoria ogni volta che si entra nel suo ambito di visibilità; se il codice che appartiene allambito di visibilità della variabile viene rieseguito, la variabile viene generalmente allocata altrove: non si mantiene il valore della variabile fra due esecuzioni successive 5 Durata fissa e durata automatica 1

Anno accademico staticLe variabili locali sono automatiche per default, ma possono essere rese fisse se dichiarate static autoLa parola chiave auto definisce esplicitamente una variabile automatica, ma è usata raramente perché ridondante 6 Durata fissa e durata automatica 2

Anno accademico void increment() { int j 1; static int k 1; j ; k ; printf(j: %d\t k: %d\n, j, k); } main() { increment(); } increment() jk La funzione increment() incre- menta i valori delle variabili j e k, entrambe inizializzate a 1 Il risultato dellesecuzione del pro- gramma è: j: 2k: 2 j: 2k: 3 j: 2k: 4 Le variabili fisse vengono inizializzate una sola volta, mentre quelle automatiche vengono inizializzate ogni volta che viene eseguito il blocco che le contiene 7 Linizializzazione delle variabili 1

Anno accademico stackLe variabili fisse vengono inizializzate di default al valore zero, quelle automatiche non vengono inizializzate (e sono normalmente allocate sullo stack) Le variabili scalari automatiche possono essere inizializzate con una qualunque espressione, con il solo vincolo che tutte le variabili contenute nellespressione siano state dichiarate (e inizializzate) in precedenza Le variabili con durata fissa possono essere inizializzate solo per mezzo di espressioni costanti, ossia non contenenti nomi di variabili 8 Linizializzazione delle variabili 2

Anno accademico Le variabili con durata fissa sono comunemente impiegate per tenere traccia del numero di volte che una funzione viene eseguita e per modificarne il comportamento ad intervalli regolari page_type chap_title La variabile page_type agisce da elemento di controllo: quando il numero della pagina è dispari, la funzione stampa la stringa puntata da chap_title sul lato destro della pagina; se il numero della pagina è pari, la stringa appare spostata a sinistra page_type page_type deve essere fissa, altrimenti si stamperebbe sempre lintestazione relativa alle pagine dispari #define ODD 0 #define EVEN 1 void print_header(chap_title) char *chap_title; { static char page_type ODD; if (page_type ODD) { printf(\t\t\t\t\t%s\n\n, chap_title); page_type EVEN; } else { printf(%s\n\n, chap_title); page_type ODD; } 9 Luso di variabili con durata fissa

Anno accademico ambito di visibilitàLambito di visibilità di una variabile definisce la regione di codice da cui è possibile accedere alla variabile programmafile funzionebloccoEsistono quattro tipi di ambiti di visibilità: programma, file, funzione e blocco ambito di visibilità a livello di programma variabili globali Lambito di visibilità a livello di programma implica che una variabile è accessibile da tutti i file sorgente; le variabili con ambito di visibilità a livello di programma sono variabili globali ambito di visibilità a livello di file Lambito di visibilità a livello di file implica che una variabile è accessibile dal punto in cui è dichiarata fino alla fine del file sorgente in cui si trova ambito di visibilità a livello di funzione Lambito di visibilità a livello di funzione implica che il nome di una variabile è accessibile dallinizio alla fine della funzione in cui è dichiarata ambito di visibilità a livello di blocco Lambito di visibilità a livello di blocco implica che una variabile è accessibile dal punto in cui è dichiarata fino alla fine del blocco in cui si trova 10 Lambito di visibilità 1

Anno accademico Le variabili dichiarate allinterno di un blocco hanno ambito di visibi- lità a livello di blocco static Le variabili dichiarate allesterno di un blocco hanno ambito di visibilità a livello di file se sono static, oppure a livello di pro- gramma goto Solo le etichette dellistruzione goto hanno ambito di visibilità a livello di funzione Lambito di visibilità di una variabile è determinato dalla posizione della dichiarazione: Ambito di visibilità a livello di blocco Ambito di visibilità a livello di programma Ambito di visibilità a livello di file Ambito di visibilità a livello di funzione Le relazioni gerarchiche tra gli ambiti di visibilità 11 Lambito di visibilità 2

Anno accademico Esempio:Esempio: I parametri delle funzioni hanno ambito di visibilità a livello di blocco: sono trattati come se fossero la prima dichiarazione di variabile nel blocco di livello più alto contenuto nella funzione int i; /* ambito di visibilità a livello di programma */ static int j; /* ambito di visibilità a livello di file */ int func(k) /* ambito di visibilità a livello di programma */ int k; /* ambito di visibilità a livello di blocco */ { int m; /* ambito di visibilità a livello di blocco */ start: ; /* ambito di visibilità a livello di funzione */ … … … } 12 Lambito di visibilità 3

Anno accademico Il C consente lattribuzione dello stesso nome a variabili diverse con ambiti di visibilità distinti È anche possibile che variabili con lo stesso nome abbiano ambiti parzialmente sovrapposti: la variabile con lambito di visibilità più limitato preclude temporaneamente la visibilità dellaltra int j 10; // visibilità a livello di programma main() { int j; /* visibilità a livello di blocco: * nasconde la variabile globale j */ for (j 0; j<5; j ) printf(j: %d, j); } Lesecuzione del pro- gramma produce: j: 0 j: 1 j: 2 j: 3 j: 4 j La variabile globale j mantiene inalterato il valore iniziale Lambito di visibilità 4

Anno accademico Una variabile con ambito di visibilità a livello di blocco non può essere acceduta dallesterno del blocco in cui è dichiarata consente di proteggere la variabile da effetti collaterali non desiderati riduce la complessità del programma, rendendolo più leggibile e mantenibile Variabili possono essere dichiarate allinterno di blocchi innestati, nascondendo temporaneamente le variabili con lo stesso nome eventualmente definite in blocchi più esterni gotoLe etichette dellistruzione goto sono gli unici nomi con ambito di visibilità a livello di funzione: devono avere nomi univoci allinterno della stessa funzione, mentre nomi coincidenti in funzioni diverse non originano conflitti 14 Lambito di visibilità a livello di blocco e funzione

Anno accademico Associare un ambito di visibilità a livello di file a una variabile significa renderla referenziabile nella parte rimanente del file in cui è definita Se il file contiene più funzioni, tutte le funzioni che seguono la dichiarazione della variabile sono in grado di referenziarla staticPer dichiarare una variabile con ambito di visibilità a livello di file occorre inserire la dichiarazione al di fuori delle funzioni e usare la parola chiave static variabili globaliLe variabili con ambito di visibilità a livello di programma, dette variabili globali, sono visibili in tutti i file sorgente (compreso quello in cui vengono dichiarate) staticUna variabile globale deve essere dichiarata al di fuori delle funzioni e non usando la parola chiave static 15 Lambito di visibilità a livello di file e programma

Anno accademico staticAllinterno di un blocco, static attribuisce ad una variabile durata fissa, anziché automatica staticAllesterno di una funzione, static non è correlata alla durata della variabile, ma ne controlla lambito di visibilità a livello di file, anziché di programma static La parola chiave static specifica sia lambito di visibilità che la durata di una variabile: Allinterno di un blocco, le regole di visibilità del blocco sono più stringenti di quelle a livello di file: la durata fissa è lunico effetto che si manifesta Allesterno di una funzione, la durata è già fissa: lambito di visibilità a livello di file è lunico effetto che si manifesta 16 I due significati di static

Anno accademico variabili globaliLuso delle variabili globali dovrebbe essere evitato perché aumenta la complessità dei programmi e li rende difficilmente mantenibili Le variabili globali possono portare a conflitti tra moduli se, per errore, vengono scelti nomi uguali per variabili globali distinte Quando occorre condividere dati tra procedure diverse, è buona regola passare i dati come parametri o passare puntatori allarea di memoria condivisa linkerbinderLe regole di attribuzione di nomi alle variabili globali sono diverse: i nomi globali devono essere riconoscibili non solo al compilatore, ma anche al linker ed al binder: lo standard ANSI garantisce il riconoscimento dei primi sei caratteri (tuttavia, nulla vieta di aggiungere caratteri per rendere i nomi più significativi) 17 Le variabili globali

Anno accademico definizioneFinora, la dichiarazione di variabile corrispondeva allallocazione di memoria per quella variabile: lallocazione di memoria è, in realtà, il risultato di un solo tipo di dichiarazione, detta definizione allusioneLe variabili globali consentono un secondo tipo di dichiarazione, detta allusione: non si alloca memoria, ma si informa il compilatore che esiste una variabile del tipo specificato definita altrove main() { extern int f(); /* allusione a funzione */ extern int j; /* allusione a variabile */ extern float f_array_of_f[]; /* allusione a variabile */ … … … 18 Definizioni e allusioni 1

Anno accademico Le variabili globali seguono le stesse regole delle funzioni: ogni volta che si utilizzano variabili definite in altro file, è necessario dichiararle con allusioni externLa parola chiave extern specifica che la variabile è definita altrove Le allusioni consentono al compilatore di effettuare i controlli di tipo: per ogni variabile globale, possono essere presenti un numero qualunque di allusioni, ma una sola definizione 19 Definizioni e allusioni 2

Anno accademico externLo standard ANSI prevede che, per definire una variabile globale, sia necessario inserire allesterno di una funzione una dichiarazione con inizializzazione: la presenza o meno della parola chiave extern non ha alcun effetto extern, definizione di provaSe il valore iniziale fosse stato omesso, il compilatore avrebbe prodotto unallusione, se è specificato extern, o una definizione di prova, che si trasforma… …in una definizione effettiva, con inizializzazione a 0, se nel file non compare altra dichiarazione …in unallusione, se nel file sorgente è contenuta una definizione reale 20 Definizioni e allusioni 3

Anno accademico registerLa parola chiave register consente di suggerire al compilatore quali variabili dovrebbero essere memorizzate nei registri register registerIl livello di supporto offerto dai compilatori allo specificatore register è molto variabile: alcuni compilatori memorizzano effettivamente tutte le variabili register in registri, fino a quando ce ne sono disponibili, altri lo ignorano, altri lo interpretano per determinare se è davvero proficuo memorizzare una data variabile in un registro register registerAd una variabile register non è assegnato alcun indirizzo di memoria: anche se il suggerimento register non viene seguito dal compilatore, se si tenta di accedere allindirizzo della variabile, si ottiene una segnalazione di errore register forSono candidati ideali per la memorizzazione register i contatori dei cicli for, sui quali vengono effettuate molte operazioni, temporalmente vicine 21 Lo specificatore register

Anno accademico constLa parola chiave const (derivata dal C ) indica che una variabile non può essere modificata dopo linizializzazione: const #defineLa parola chiave const può essere impiegata in alternativa alla direttiva #define const char str[9] Costante; str[0] a; /* non ammesso */ 22 Il modificatore di classe const

Anno accademico Specificatore di classe di memorizzazione Allesterno di una funzione Allinterno di una funzione Argomenti di una funzione auto register auto o register NON PERMESSOVisibilità: blocco Durata: automatica Visibilità: blocco Durata: automatica static Visibilità: file Durata: fissa Visibilità: blocco Durata: fissa NON PERMESSO extern Visibilità: programma Durata: fissa Visibilità: blocco Durata: fissa NON PERMESSO nessuno specificatore di classe Visibilità: programma Durata: fissa Visibilità: blocco Durata: automatica Visibilità: blocco Durata: automatica Posizione della dichiarazione La semantica degli specificatori di classe di memorizzazione 23 Riepilogo delle classi di memorizzazione