Gestione della Memoria
|
|
|
- Gina Motta
- 9 anni fa
- Visualizzazioni
Transcript
1 Gestione della Memoria Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 27 apr, 2016
2 Sommario 1 Tecniche di gestione Progetto della gestione della memoria Tipologie 2 Gestione statica 3 Gestione dinamica Blocchi Record di attivazione Gestione della pila Gestione dinamica con heap 4 Implementazione delle regole di scope Scope statico Puntatore di catena statica Display Scope dinamico Lista di associazioni CRT Gestione della Memoria 27 apr, / 54
3 Agenda 1 Tecniche di gestione Progetto della gestione della memoria Tipologie 2 Gestione statica 3 Gestione dinamica 4 Implementazione delle regole di scope Gestione della Memoria 27 apr, / 54
4 Progetto della gestione della memoria Programmi e dati Allocazione Durata Strutture dati ausiliarie per la gestione Gestione della Memoria 27 apr, / 54
5 Tipologie Macchina astratta di basso livello Gestione statica: dati e programmi in memoria prima dell esecuzione e fino alla fine Macchina astratta di alto livello Gestione dinamica: allocazione e deallocazione decisa durante l esecuzione Ricorsione: il compilatore non può stabilire un numero massimo di sottoprogrammi attivi Uso di una Pila (politica LIFO) Allocazione dinamica esplicita Uso dell Heap Gestione della Memoria 27 apr, / 54
6 Agenda 1 Tecniche di gestione 2 Gestione statica 3 Gestione dinamica 4 Implementazione delle regole di scope Gestione della Memoria 27 apr, / 54
7 Gestione statica Gestione ad opera del compilatore Tutti gli oggetti in una zona fissata Variabili globali Istruzioni del codice oggetto Costanti Tabelle interne prodotte dal compilatore: Gestione nomi Controllo sui tipi Garbage collection Linguaggio senza ricorsione Zona di memoria fissata per ogni sottoprogramma Variabili locali Parametri Indirizzo di ritorno Info di bookkepping Gestione della Memoria 27 apr, / 54
8 Gestione statica [... cont.] sottoprogramma p 2 sottoprogramma p 1 Informazioni di sistema Indirizzo di ritorno Parametri Informazioni di sistema Indirizzo di ritorno Parametri sottoprogramma p n Informazioni di sistema Indirizzo di ritorno Parametri Variabili Locali Variabili Locali Variabili Locali Risultati Intermedi Risultati Intermedi... Risultati Intermedi Gestione della Memoria 27 apr, / 54
9 Gestione statica Problema Osservazioni chiamate successive dello stesso sottoprogramma condividono la stessa area di memoria ricorsione: 1 int fib (int n) { 2 if (n == 0) return 1; 3 else if (n == 1) return 1; 4 else return fib(n-1) + fib(n-2); 5 } il numero di chiamate ricorsive dipende dall argomento n: servono più copie dell area di memoria dedicata ad ogni sottoprogramma (una per chiamata) Gestione della Memoria 27 apr, / 54
10 Agenda 1 Tecniche di gestione 2 Gestione statica 3 Gestione dinamica Blocchi Record di attivazione Gestione della pila Gestione dinamica con heap 4 Implementazione delle regole di scope Gestione della Memoria 27 apr, / 54
11 Gestione dinamica Rinviene dall uso della strutturazione a blocchi dei programmi In-line Corpi di sottoprogrammi Apertura e chiusura politica LIFO Gestione della Memoria 27 apr, / 54
12 Blocchi 1 A: { 2 int a = 1; 3 int b = 0; 4 B: { 5 int c = 3; 6 int b = 3; 7 } 8 b = a+1; 9 } Gestione della Memoria 27 apr, / 54
13 Blocchi [... cont.] b 0 a 1 A b 0 a 1 A b 2 a 1 A b 3 c 3 B Gestione della Memoria 27 apr, / 54
14 Record di attivazione Spazio di memoria allocato su pila (noto anche come frame) per i blocchi in-line per il corpo di sottoprogramma Associato ad ogni attivazione (dinamicamente) e non alla dichiarazione (staticamente) Pila di run-time (o di sistema) Utilizzato anche per linguaggi senza ricorsione per ottimizzare l occupazione della memoria rispetto ad una politica interamente di tipo statico Gestione della Memoria 27 apr, / 54
15 Record di attivazione [... cont.] Un RdA in-line contiene: Risultati intermedi calcoli complessi semplificati dal compilatore Variabili locali dichiarate nel blocco dimensioni note a compile-time Eccezione: dim. array dinamici gestite con (parte fissa, parte variabile) Puntatore catena dinamica ovvero link dinamico o di controllo punta al precedente RdA sulla pila necessario date le diverse dim. dei RdA RdA Blocco Inline Puntatore di catena statica / dinamica Variabili locali Variabili temporanee Gestione della Memoria 27 apr, / 54
16 Record di attivazione [... cont.] Nel RdA di sottoprogramma: Risultati intermedi Variabili locali Punt. di catena dinamica Punt. di catena statica se si adotta tale scope Indirizzo di ritorno prima istruzione da eseguire dopo l uscita Indirizzo del risultato nel RdA del CHIAMANTE per funzioni Parametri Valori dei parametri effettivi usati dal sottoprogramma RdA di Sottoprogramma Puntatore di catena dinamica Puntatore di catena statica Indirizzo di ritorno Indirizzo dei risultati Parametri Variabili locali Risultati intermedi Gestione della Memoria 27 apr, / 54
17 Record di attivazione [... cont.] Osservazioni La disposizione dei campi effettiva dipende dalle implementazioni Si usano offset per individuare i vari campi di norma, non compaiono identificatori di variabili (locali e non): il compilatore calcola gli offset Ottimizzazione Es.: salvataggio di informazioni nei registri anziché nel RdA Gestione della Memoria 27 apr, / 54
18 Gestione della pila Puntatore di RdA (o frame pointer): si riferisce all ambiente corrente Stack pointer dell inizio della memoria libera Operazioni su RdA Inserimento entrata in un blocco chiamata di sottoprogramma eliminazione uscita dal blocco uscita da sottoprogramma Gestione della Memoria 27 apr, / 54
19 Gestione della pila [... cont.] fondo della pila RdA RdA. puntatore RdA RdA cima della pila zona libera Gestione della Memoria 27 apr, / 54
20 Gestione della pila [... cont.] Codice aggiunto dal compilatore nel CHIAMANTE (o blocco esterno): sequenza di chiamata eseguita, in parte, prima della chiamata (entrata) eseguita, in parte, al ritorno dalla chiamata (uscita) nel CHIAMATO (o blocco interno): prologo eseguito subito dopo la chiamata (entrata) epilogo eseguito subito prima del ritorno dalla chiamata (uscita) Gestione della Memoria 27 apr, / 54
21 Azioni chiamata / entrata (seq. di chiamata + prologo): modifica del PC allocazione spazio su pila modifica puntatore RdA passaggio parametri salvataggio registri esecuzione codice inizializzazione Gestione della Memoria 27 apr, / 54
22 Azioni [... cont.] ritorno / uscita (ritorno controllo di chiamata + epilogo): ripristino del PC restituzione dei valori (funzioni) ripristino registri (+modifica puntatore RdA) esecuzione codice finalizzazione deallocazione spazio su pila Gestione della Memoria 27 apr, / 54
23 Gestione dinamica con heap Per linguaggi con allocazione esplicita della memoria C, C++, PASCAL,... non si può seguire una politica LIFO Si utilizza una zona di memoria diversa dallo stack: gestito con blocchi di dim. fissa di dim. variabile HEAP Gestione della Memoria 27 apr, / 54
24 Gestione dinamica con heap [... cont.] 1 int * p, * q; / * p,q puntatori a var. intere; val. NULL * / 2 p = malloc (sizeof (int)); / * alloca var. puntata da p * / 3 q = malloc (sizeof (int)); / * alloca var. puntata da q * / 4 * p = 0; / * dereferenzia ed assegna * / 5 * q = 1; / * dereferenzia ed assegna * / 6 free(p); / * dealloca la var. puntata * / 7 free(q); / * dealloca la var. puntata * / Gestione della Memoria 27 apr, / 54
25 Blocchi di dim. fissa Heap suddiviso in blocchi di dimensioni fisse e limitate collegati in una struttura di lista detta lista libera allocazione deallocazione il primo elemento della lista libera viene rimosso il puntatore a tale elemento viene restituito si aggiorna il puntatore al primo elemento della lista libera all elemento successivo il blocco liberato viene collegato in testa alla lista libera si aggiorna il puntatore all elemento successivo a quello aggiunto Gestione della Memoria 27 apr, / 54
26 Blocchi di dim. fissa [... cont.] inizio lista inizio lista.. Gestione della Memoria 27 apr, / 54
27 Blocchi di dim. variabile Dim. fissa: inadeguata per strutture grandi Esempio grande vettore di dim. variabili Blocchi di dim. variabile: gestione tesa ad ottimizzare (con opportuni compromessi) 1 l occupazione della memoria frammentazione interna porzione di blocco allocato inutilizzato esterna memoria libera sufficiente nel complesso, ma non in un unico blocco necessità di ricompattamento 2 l efficienza dell esecuzione basso numero di operazioni aggiuntive richieste (overhead) Gestione della Memoria 27 apr, / 54
28 Blocchi di dim. variabile [... cont.] LL x fabbisogno y x+y. frammentazione esterna Gestione della Memoria 27 apr, / 54
29 Unica lista libera Inizialmente un blocco pari a tutta la mem. disponibile (heap) richiesta di allocazione soddisfatta usando le prime n parole avanza il puntatore LL analogamente per le successive richieste i blocchi deallocati (non contigui) formano una catena Gestione della Memoria 27 apr, / 54
30 Unica lista libera [... cont.] Quando non c è più spazio sull heap: 1 utilizzo diretto della lista libera si mantiene una lista di blocchi liberi di dim. variabile allocazione: si cerca nella lista un blocco di dim. k n utile al fabbisogno criterio first-fit (migliore efficienza) criterio best fit (migliore occupazione) la porzione di blocco k n non usata resta nella lista libera deallocazione: si ricompatta il blocco eventualmente assieme ai blocchi liberi adiacenti 2 compattazione della mem. libera in caso di esaurimento dello spazio direttamente allocabile: spostamento dei blocchi attivi (solo se rilocabili) compattamento dei blocchi liberi in un estremità della memoria Gestione della Memoria 27 apr, / 54
31 Multiple liste libere Molteplici liste ognuna contenente di blocchi di diverse grandezze per un fabbisogno pari ad n allocazione: selezione della lista con blocchi di dim. k con k n allocazione usando tale lista come nel caso di singola lista libera deallocazione: idem Osservazione frammentazione interna se le dim. sono statiche Gestione della Memoria 27 apr, / 54
32 Multiple liste libere [... cont.] buddy system: dim. dei blocchi potenze di 2 allocazione: sia k tale che blocco di dim. 2 k > n se libero viene allocato altrimenti si considera un blocco della lista 2 k+1 e lo si divide in due parti 1 una viene allocata 2 l altra diventa un blocco libero tra i blocchi 2 k deallocazione: ricerca del compagno (buddy) se libero fusione in un blocco di dim. 2 k+1 heap di Fibonacci: come il precedente la successione di Fibonacci cresce più lentamente Gestione della Memoria 27 apr, / 54
33 Agenda 1 Tecniche di gestione 2 Gestione statica 3 Gestione dinamica 4 Implementazione delle regole di scope Scope statico Scope dinamico Gestione della Memoria 27 apr, / 54
34 Implementazione delle regole di scope Riferimenti nel RdA: nomi locali Nomi non locali? ricerca nei RdA attivi sulla pila ordine dipende dal tipo di scope adottato: statico dinamico Gestione della Memoria 27 apr, / 54
35 Scope statico Ordine di ricerca di riferimenti non-locali diverso da quello dei blocchi sulla pila 1 A:{ int y=0; 2 B:{ int x = 0; 3 void P (int n) { 4 x = n+1; 5 y = n+2; 6 } 7 C:{ int x = 1; 8 P(2); 9 write(x); 10 } 11 } 12 write(y); 13 } dopo la chiamata di P, sulla pila: Gestione della Memoria 27 apr, / 54
36 Scope statico [... cont.] y int 0... A P A B x int 0 P fun... B codice C x int 1... C p. RdA attivo n int 1... P Gestione della Memoria 27 apr, / 54
37 Scope statico [... cont.] RdA di un blocco B collegato mediante puntatore di catena statica al blocco immediatamente esterno che lo contiene nel sorgente B blocco di sottoprogramma: il blocco esterno a B ne contiene la dichiarazione B attivo: anche i blocchi esterni che lo contengono devono essere attivi (RdA sulla pila) vengono mantenute quindi 2 catene (cfr. fig. seguente) gestione tramite codice: sequenza di chiamata, prologo ed epilogo Gestione della Memoria 27 apr, / 54
38 Scope statico [... cont.] Esempio catena statica (e dinamica) per la struttura a destra A B C B D E C A C D E. Gestione della Memoria 27 apr, / 54
39 Calcolo puntatore di catena statica In genere, all ingresso in un blocco: il CHIAMANTE calcola del punt. di catena statica del CHIAMATO e glielo passa 2 casi: 1 CHIAMATO all esterno del CHIAMANTE perché sia visibile, il CHIAMATO deve trovarsi in un blocco esterno che includa anche il CHIAMANTE (quindi il RdA di questo blocco esterno è già sulla pila) numero di livelli di distanza determinabile dal compilatore: k = livello(chiamato) livello(chiamante) si seguono k livelli di catena statica 2 CHIAMATO all interno del CHIAMANTE per la visibilità, il CHIAMATO è dichiarato nel blocco della chiamata per il CHIAMANTE, basta risalire al blocco esterno k = 1 il CHIAMATO (prologo) memorizza il puntatore di catena statica ricevuto nel suo RdA Gestione della Memoria 27 apr, / 54
40 Calcolo puntatore di catena statica [... cont.] il compilatore tiene traccia del liv. di annidamento delle chiamate usando la tavola dei simboli: nome + numero di scope nell es. precedente, per risolvere y in P calcola distanza 2 da A dov è la sua dichiarazione tuttavia non può risolvere tutti i riferimenti; alcuni sono legati al numero di RdA presenti sulla pila a run-time Osservazione svantaggio: per una distanza pari a k, si devono scorrere k livelli di catena statica Gestione della Memoria 27 apr, / 54
41 Scope statico / Display Obiettivo: ridurre ad un numero costante gli accessi display: vettore di dim. pari a numero di livelli di annidamento display[k]: puntatore al RdA di livello k attivo Per ogni riferimento ad un nome non locale: dichiarato in blocco esterno a livello k il puntatore al RdA è nel display nella posizione k Gestione della Memoria 27 apr, / 54
42 Scope statico / Display [... cont.] Gestione semplice ma più costosa: all entrata in nuovo ambiente di livello k, si salva (nel CHIAMATO) il valore precedente di display[k], se presente condivisione del display in toto o in parte col CHIAMANTE si aggiorna display[k] con il puntatore del RdA del CHIAMATO Gestione della Memoria 27 apr, / 54
43 Scope statico / Display [... cont.] Siano n liv. del CHIAMANTE e m liv. del CHIAMATO 1 CHIAMATO all esterno del CHIAMANTE m < n condivisione della str. statica fino al liv. m 1 si aggiorna display[m] per puntare al RdA del CHIAMATO, salvando il contenuto precedente il display è attivo fino alla pos. m; all uscita verrà ripristinato 2 CHIAMATO all interno del CHIAMANTE m > n condivisione del display fino al livello n si incrementa il liv. di profondità del display e inserisci il puntatore al RdA del CHIAMATO in display[n + 1] se si era già arrivati a liv. n + 1, si salva il vecchio contenuto presente Gestione della Memoria 27 apr, / 54
44 Scope statico / Display [... cont.] vantaggio: semplicità ambienti non locali considerati secondo l ordine di chiamata svantaggi: necessità di memorizzare esplicitamente i nomi per la ricerca può essere inefficiente far tutto il lavoro a run-time Gestione della Memoria 27 apr, / 54
45 Scope statico / Display [... cont.] chiamate nell ordine A B C D E C a sinistra della pila puntatori relativi ai vecchi valori nei display nella pos. del CHIAMATO linea tratteggiata p. non attivo A: [ B: [ ], C: [ D: [ ], E: [ ] ] ] Gestione della Memoria 27 apr, / 54
46 Scope dinamico / Lista di associazioni memorizzazione associazioni nome/oggetto nel RdA, oppure in una lista di associazioni (A-list) gestita come una pila entrata/uscita in/da un nuovo ambiente: info: nuove associazioni vengono inserite/eliminate nella/dalla lista locazione tipo altre info necessarie a controlli semantici Gestione della Memoria 27 apr, / 54
47 Scope dinamico / Lista di associazioni [... cont.]... A x y... x y B x v... B C x v w x A C w x D w... D w... p. RdA attivo Gestione della Memoria 27 apr, / 54
48 Scope dinamico / Lista di associazioni [... cont.] / x tipo, locazione,... y x y x x B v v w x A C w D w p. A-List w x Gestione della Memoria 27 apr, / 54
49 Scope dinamico / CRT Si ovvia agli svantaggi di altri metodi a scapito dell efficienza tutti i blocchi in un unica tabella: CRT Central Referencing environment Table tutti i nomi presenti; per ogni nome: flag (associazione attiva sì/no) puntatore alle informazioni associate (locazione, tipo,... ) se tutti i nomi sono noti a compile-time ricerca in tempo costante (ind.tabella + offset) altrimenti: ricerca hash Gestione della Memoria 27 apr, / 54
50 Scope dinamico / CRT [... cont.] Ingresso da A in B: modifica della CRT per un nuovo ambiente locale di A non necessariamente in entry contigue nella tabella salvataggio associazioni disattivate (in una pila) per successivo ripristino all uscita da B Pila esplicita top: associazione attiva altre: associazioni disattivate nascosta (separata dalla CRT) (nome, flag, rif. ad oggetto) non è richiesta ricerca accesso (diretto o hash) alla tabella, che contiene l info Gestione della Memoria 27 apr, / 54
51 Scope dinamico / CRT [... cont.] in C in B in A x info info info / y info / v info / w info info / in D in C chiamate di A, B, C, D Gestione della Memoria 27 apr, / 54
52 Scope dinamico / CRT [... cont.] A AB ABC ABCD x 1 α 1 x 1 β 1 x 1 γ 1 x 1 γ 1 y 1 α 2 y 1 α 2 y 1 α 2 y 1 α 2 v 0 v 1 β 2 v 0 β 2 v 0 β 2 w 0 w 0 w 1 γ 2 w 1 δ 1 stack nascosto x α 1 x α 1 x β 1 x α 1 x β 1 w γ 1 Gestione della Memoria 27 apr, / 54
53 Esercizi Dal libro di testo (2a ed.) Es.1 scrivere in pseudolinguaggio un frammento di codice tale che il n.ro max di RdA sulla pila non sia determinabile staticamente Es.2 scrivere in pseudolinguaggio una funzione ricorsiva tale che il n.ro max di suoi RdA sulla pila sia determinabile staticamente Es.3 Es.4 Es.5 Es.6 è più facile implementare la regola di scope statico o dinamico? Motivare Es.7 Gestione della Memoria 27 apr, / 54
54 Riferimenti Gabbrielli & Martini: Linguaggi di Programmazione, McGraw-Hill 2a edizione. [cap. 7] Gestione della Memoria 27 apr, / 54
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
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.
Il linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
Strutture Dinamiche. Fondamenti di Informatica
Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));
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
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
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
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
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
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;
La Gestione della Memoria. Carla Binucci e Walter Didimo
La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina
Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, 2016. Dipartimento di Informatica Università degli Studi di Bari
Nomi e Ambiente Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 20 apr, 2016 Sommario 1 Nomi Definizione Astrazione Elementare Progettazione
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
GESTIONE DELLA MEMORIA CENTRALE 6.1 D. - UNICAL
GESTIONE DELLA MEMORIA CENTRALE 6.1 Gestione della Memoria Background Spazio di indirizzi Swapping Allocazione Contigua Paginazione 6.2 Background Per essere eseguito un programma deve trovarsi (almeno
Linguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
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
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
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
Scope, Memoria e Tabella dei Simboli
Scope, Memoria e Tabella dei Simboli La tabella dei simboli è uno strumento fondamentale attraverso il quale interpreti e compilatori implementano la traduzione da un programma scritto in un linguaggio
FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:
FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi
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=
Calcolatori Elettronici Parte VIII: linguaggi assemblativi
Anno Accademico 2013/2014 Calcolatori Elettronici Parte VIII: linguaggi assemblativi Prof. Riccardo Torlone Universita di Roma Tre Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività
Introduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
Esercitazioni di Informatica 3
Esercitazioni di Informatica 3 Part I: Programming Languages Syntax and semantics Laurea in Ingegneria Informatica Politecnico di Milano Polo di Milano Leonardo Esercizio 1: EBNF Utilizzando il linguaggio
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 5 Martedì 25-10-2016 Definizione di processo Esiste una distinzione concettuale
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
Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari
Astrazione Dati Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 10 mag, 2016 Sommario 1 Astrazione dati Incapsulamento Esempio / ADT pila
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
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti
Visibilità e tempo di vita delle variabili. (più sintesi di alcuni concetti della prima parte del corso)
Visibilità e tempo di vita delle variabili (più sintesi di alcuni concetti della prima parte del corso) Struttura dei programmi C/C++ Un programma C/C++ deve essere contenuto in uno o più file (per ora
4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
I Linguaggi di Programmazione
I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio
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
La struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - [email protected] Introduzione Una coda (o queue) è una struttura dati astratta
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
Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,
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
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
Strutture dati: tavole o tabelle TABELLA DEI SIMBOLI
TABELLA DEI SIMBOLI Le tabelle dei simboli servono a due scopi: controllano la correttezza semantica (la parte dipendente dal contesto della grammatica) ed aiutano nella generazione del codice. Tutte queste
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
PILE E CODE. Pile (stack):
PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):
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:
Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.
Il File System Il file system È quella parte del Sistema Operativo che fornisce i meccanismi di accesso e memorizzazione delle informazioni (programmi e dati) allocate in memoria di massa. Realizza i concetti
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)
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
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
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
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
Uso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
14 - Metodi e Costruttori
14 - Metodi e Costruttori 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
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
Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...
Sommario PREFAZIONE...XI Aggiornamenti e novità... xi Lo scopo di questo libro... xii Diagramma delle dipendenze... xii La metodologia di insegnamento... xiii Panoramica sul libro... xvi Ringraziamenti...
Algoritmi di ordinamento: Array e ricorsione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion
Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX
Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di
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)
Calcolatori Elettronici
Calcolatori Elettronici Il linguaggio assemblativo MIPS (4) Le function (2) Gestione dei sottoprogrammi $a0 - $a3 - $v1 $ra : 4 registri argomento per il passaggio dei parametri : due registri per la restituzione
