Stack
Partendo dal main, lo stack (pila) si riempie con le variabili del sottoprogramma chiamato e l’indirizzo di ritorno (return) man mano che vengono chiamati i sottoprogrammi successivi.
La pila, è un tipo di dato astratto che viene usato in diversi contesti per riferirsi a strutture dati, le cui modalità d’accesso ai dati in essa contenuti seguono una modalità LIFO
LIFO → I dati vengono letti in ordine inverso rispetto a quello in cui sono stati inseriti scritti. Si riempie e si svuota dall’alto. “Last In First Out“
Lo stack viene svuotato man mano che i sottoprogrammi terminano la loro esecuzione. Quando termina il main, lo stack è vuoto.
Lo stack ha una dimensione predefinita, nel caso vengano riempite tutte (tante variabili (parametri inclusi) e sottoprogrammi), si genera un errore in fase di esecuzione chiamato “stack overflow“.
Stack Pointer
Puntatore alla pila, un registro che contiene l’indirizzo della parola di memoria da leggere nello stack.
È necessario poichè permette di eseguire del codice, un numero arbitrario di volte, senza prevedere a priori quant’è questo numero odi volte.
Formula Array
#define DIM 50
void azzera(int a[])
{
int i;
for (i = 0; i < DIM; i++)
a[i] = 0;
return 0;
}
Formula Array bidimensionale
int base + (indice riga * dimensione colonna + indice colonna) * dimensione elemento
#define DIMCOL 70
#define DIMROW 50
void azzera (int a[][DIM])
{
int i,j;
for (i = 0; i < 50; i++)
for (j = 0; j < 70; j++)
cosa[i][j] = 0;
}
Nel parametro formale, non si mette la DIM delle righe dell’array multidimensionale. (Non si mette nessun valore nella prima parentesi quadra).