Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il...
Transcript of Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il...
![Page 1: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/1.jpg)
7
Il linguaggio C
![Page 2: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/2.jpg)
8
Perché il linguaggio C?
• Larga diffusione nel software applicativo
• Standard di fatto per lo sviluppo di softwaredi sistema– Visione a basso livello della memoria
– Capacità di manipolare singoli bit
![Page 3: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/3.jpg)
9
Perché il linguaggio C? (2)
• Standard di fatto per lo sviluppo di softwaredi sistema (cont.)– possibilità di incapsulare parti di codice
assembler che effettuano compiti impossibili daesprimere in linguaggi ad alto livello
• es. esecuzione di istruzioni ‘speciali’ (TRAP),manipolazione diretta di registri
– Compilazione estremamente efficiente
– Occupazione di memoria ridotta
![Page 4: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/4.jpg)
10
C : caratteristiche fondamentali
• Paradigma imperativo– costrutti di controllo simili a Java (while-do, for,if (..) else, switch)
– tipi base molto simili a Java (int, double etc…)
• Ma … NON è un linguaggio ad oggetti– NON supporta la nozione di oggetti, classi o
meccanismi di ereditarietà
– la principale forma di strutturazione sono le funzioni• un programma C è una collezione di funzioni di cui una di
nome main
• le funzioni possono risiedere in uno o più file
![Page 5: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/5.jpg)
11
C : caratteristiche fondamentali (2)
• Memoria e puntatori– in C è possibile conoscere e denotare
l’indirizzo della cella di memoria in cui èmemorizzata una variabile (il puntatore)
• es :int a = 50; /* una var intera */
int * b; /* una var puntatore a interi */
...
b = &a; /* assegna a b l’indirizzo dellacella in cui è memorizzata a */
![Page 6: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/6.jpg)
12
C : caratteristiche fondamentali (3)
• Memoria e puntatori– in C è possibile conoscere e denotare
l’indirizzo della cella di memoria in cui èmemorizzata una variabile (il puntatore)
• es :int a = 50;
int *b;
…
b = &a;
50350
a è memorizzata nella cella 350
...450
![Page 7: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/7.jpg)
13
C : caratteristiche fondamentali (4)
• Memoria e puntatori– in C è possibile conoscere e denotare
l’indirizzo della cella di memoria in cui èmemorizzata una variabile (il puntatore)
• es :int a = 50;
int *b;
…
b = &a;
50350
b è memorizzata nella cella 450
...450
![Page 8: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/8.jpg)
14
C : caratteristiche fondamentali (5)
• Memoria e puntatori– in C è possibile conoscere e denotare
l’indirizzo della cella di memoria in cui èmemorizzata una variabile (il puntatore)
• es :int a = 50;
int *b;
…
b = &a;
50350
Dopo questo assegnamento in b è memorizzato l’indirizzo di a
350450
![Page 9: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/9.jpg)
15
C : caratteristiche fondamentali (6)
• Memoria e puntatori– è possibile conoscere e/o modificare il
contenuto di una variabile manipolandodirettemente il suo puntatore (operatore didereferenziazione ‘ * ’)
• es :int a = 50;
int *b = &a;
…
*b = *b + 4;
54350
Dopo questo assegnamento in a è memorizzato il valore 50 + 4
350450
![Page 10: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/10.jpg)
16
C : un primo programma
• Il più semplice programma C è costituito da– una singola funzione (main)
– memorizzata in un singolo file
![Page 11: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/11.jpg)
17
C : un primo programma (2)
/* Programma che calcola il massimo fra tre numeriinseriti da tastiera */
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
![Page 12: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/12.jpg)
18
C : un primo programma (3)
/* Programma che calcola il massimo fra tre numeriinseriti da tastiera */
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Commenti
![Page 13: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/13.jpg)
19
Commenti
• I commenti possono essere inseriti con– /* qua un commento anche su piùlinee */
– // commento su singola linea
![Page 14: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/14.jpg)
20
C : un primo programma (4)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Inclusione delle informazioninecessarie per utilizzare le funzioni nelle librerie standard di I/O del C
![Page 15: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/15.jpg)
21
C : un primo programma (5)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“ %d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Inclusione delle informazioninecessarie per utilizzare le funzioni nelle librerie standard di I/O del C
Funzioni per leggere datastiera, visualizzare dati
![Page 16: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/16.jpg)
22
C : un primo programma (6)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Definizione di MACRO(costante simbolica)
- N è il nome simbolico per lasequenza di caratteri “3”- Ogni occorrenza di N vienesostituita da “3” prima di iniziare lacompilazione
![Page 17: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/17.jpg)
23
C : un primo programma (7)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Intestazione della funzione, fornisce :- il tipo del valore prodotto dalla funzione (int)- descrizione degli argomenti (inquesto caso nessuno (void))
![Page 18: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/18.jpg)
24
C : un primo programma (8)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Dichiarazione di variabili localialla funzione(il loro spazio di memoria vieneallocato all’inizio della esecuzionedella funzione e deallocato alla fine)
![Page 19: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/19.jpg)
25
C : un primo programma (9)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Invocazione della funzionedi libreria che scrive su video
![Page 20: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/20.jpg)
26
C : un primo programma (10)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Stringa di formattazione
Placeholder (segnaposto)per un valore intero (%d)
![Page 21: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/21.jpg)
27
C : un primo programma (11)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Il segnaposto viene rimpiazzatocon il valore dei parametri(in ordine)
![Page 22: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/22.jpg)
28
C : un primo programma (12)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Invocazione della funzionedi libreria che legge da tastiera
![Page 23: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/23.jpg)
29
C : un primo programma (13)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Indirizzo (&) della variabile (tmp)in cui deve essere inserito il valoreintero (%d) letto da tastiera.
![Page 24: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/24.jpg)
30
C : un primo programma (14)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Espressione condizionale
![Page 25: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/25.jpg)
31
C : un primo programma (15)
#include <stdio.h>#define N 3int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max > tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Comando return : termina l’esecuzionedella funzione e restituisce il valore delle espressione specificata
Per convenzione se tutto è andato beneil main restituisce 0.
![Page 26: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/26.jpg)
32
Come si esegue un programma C?• Prima di essere eseguito dal processore il
programma deve essere– 1. pre-processato
– 2. compilato
– 3. collegato (linking)
– 4. caricato in memoria (loading)
• Vediamo come funzionano le fasi 1,2,4– il linking verrà discusso più avanti
![Page 27: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/27.jpg)
33
Pre-processing e compilazione
• Il programma deve essere editato e salvato in unfile con estensione ‘.c’– es. posso salvare il programma esempio nel fileprova.c
• Non c’è alcun rapporto fra il nome del file ed ilnome delle funzioni in esso contenute (!= Java)
![Page 28: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/28.jpg)
34
Pre-processing e compilazione (2)• Il compilatore può essere invocato con il
comandogcc -Wall -pedantic -g prova.c -o nomees
– -Wall -pedantic opzioni che aumentano il numero dicontrolli e di messaggi di ‘avvertimento’ visualizzati
– -g opzione che include anche le informazioni necessarie aldebugger
– prova.c nome del file da compilare/preprocessare
– -o nomees opzione che permette di decidere il nome delfile eseguibile (nomees). Altrimenti il file eseguibile sichiama di default a.out
![Page 29: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/29.jpg)
35
Pre-processing e compilazione (3)• Preprocessing
– #include <file>
– #include “file”queste linee vengono rimpiazzate dal contenuto dei file specificati
(<file> viene cercato tra gli header standard, su Linux/usr/include; “file” viene cercato a partire dalla directorycorrente)
– #define nome testo• rimpiazza ogni occorrenza di nome con il testo specificato
• è possibile specificare del testo parametrico
![Page 30: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/30.jpg)
36
Pre-processing e compilazione (4)• Compilazione
– trasforma il file preprocessato (senza più #include o#define) in un file eseguibile che contiene
• alcune informazioni di carattere generale
• rappresentazione binaria di (parte dei) dati del programma (variabiliglobali)
• codice assembler eseguibile dal processore target (testo)
– per capire come avviene questa traduzione, dobbiamospecificare come un programma vede la memoria durante lasua esecuzione (spazio di indirizzamento)
– un programma in esecuzione viene comunemente dettoprocesso
![Page 31: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/31.jpg)
37
Spazio di indirizzamento
Text
Data
Stack
Area vuota
Traduzione in assembler delle funzioni che compongono il programma0
232 - 1
Variabili globali a tutte le funzioni
Pila di FRAME, uno per ognichiamata di funzione da cui nonabbiamo ancora fatto ritorno
![Page 32: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/32.jpg)
38
Spazio di indirizzamento (2)
Text
Data
Stack
Area vuota
0
232 - 1
Contenuti tipici di un FRAME :- variabili locali della funzione- indirizzo di ritorno (indirizzo dell’istruzione successiva a quella che ha effettuato la chiamata alla funzione)- copia dei parametri di chiamata
Direzione dicrescita dello stack
![Page 33: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/33.jpg)
39
Spazio di indirizzamento (3)• Spazio di indirizzamento
Text
Data
Stack
Area vuota
0
232 - 1
All’inizio dell’esecuzione lo Stackcontiene solo il FRAME per lafunzione main
Successivamente :* ogni volta che viene chiamata unanuova funzione viene inserito unnuovo frame nello stack* ogni volta che una funzione termina(es. return 0) viene eliminato ilframe in cima dello stack el’esecuzione viene continuata apartire dall’indirizzo di ritorno
![Page 34: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/34.jpg)
40
Spazio di indirizzamento (4)
Text
Data
Stack
Area vuota
0
232 - 1
Direzione dicrescita dello heap
Spazio di memoria dedicato ai datiglobali a tutte le funzioni.Diviso in statico per i dati la cui dimensione è nota a tempo dicompilazione e dinamico (heap)
heap
![Page 35: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/35.jpg)
41
Compilazione : un esempio
int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Ogni variabile corrisponde aduna o più parole/celle dimemoria
&i&max&tmp
32 bit
![Page 36: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/36.jpg)
42
Compilazione : un esempio (2)
int main (void) { int i, tmp, max = 0; printf(“Inserisci %d interi positivi\n”, N); for (i = 0; i < N; i++) { scanf(“%d”, &tmp); max = (max < tmp)? max : tmp ; } printf(“Il massimo è %d \n”, max); return 0;}
Ogni statement viene tradotto in - istruzioni assembler che lavoranosulle celle rilevanti- CALL di altre funzioni (es. printf)
&i&max&tmp
![Page 37: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/37.jpg)
43
Formato del file eseguibile
• La compilazione produce un file eseguibile (es.a.out)
• Il formato di un eseguibile dipende dal sistemaoperativo
• In Linux un eseguibile ha il formato ELF(Executable and Linking Format)
![Page 38: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/38.jpg)
44
Formato del file eseguibile (2)– Formato di un eseguibile ELF
Text segment
I-Data segmentAmpiezza BSS
Altre info
Magic number
File a.out
Variabili globaliinizializzate
Ampiezza area dimemoria occupata dalle variabiliglobali NON inizializzate
Numero che contraddistingue il file come eseguibile
Codice del programma (assemblato)
![Page 39: Il linguaggio C - di.unipi.itcardillo/labso/files/lez01/SOL_introLinguaggioC.pdf · 8 Perché il linguaggio C? •Larga diffusione nel software applicativo •Standard di fatto per](https://reader033.fdocuments.net/reader033/viewer/2022052408/5c67720509d3f23a018bcd16/html5/thumbnails/39.jpg)
45
Formato del file eseguibile (3)– L’eseguibile contiene tutte le informazioni per creare
la configurazione iniziale dello spazio diindirizzamento (loading)
Text
I-Data segment
Stack
Area vuota
0
232 - 1
BSS-segment
Text segment
I-Data segmentAmpiezza BSS
Altre info
Magic number
File a.out
Data
FRAME per la funzione main