In questo tutorial vedremo come C gestisce la memoria del computer.
Innanzitutto scopriamo come i nostri dati vengono memorizzati dai computer. L’unità di base dell’ informazione è il bit che contiene un valore binario (0 o 1).
Un altra unita fondamentale è il byte, costituito da 8 bit. In esso è possibile salvare un valore numerico da 0 a 255.
Esistono poi le word, che nei primi anni dell’informatica non avevano nessuna specifica per la loro dimensione, quindi cambiando computer trovavamo word di 7, 13, 24 bit. Con il passare degli anni e l’avvento dei processori moderni le word sono diventate multipli di byte, quindi 16, 32, 64, e 128 bit.
Arriviamo ora alla memoria del computer, che è organizzata in word. Ogni word ha un indirizzo di memoria che aumenta di bit in bit.
Quando eseguiamo un programma in C una parte di memoria viene dedicata al nostro programma, questa si divide in due parti: stack e heap.
Lo stack ha dimensione fissa e costituisce la memoria statica del programma, è chiamato così perché si comporta come una pila. L’ ultimo elemento inserito sarà il primo ad uscire. Gli elementi contenuti nello stack sono i Record di attivazione delle funzioni. Quando viene richiamata una funzione, si aggiunge un record di attivazione allo stack. Quando la funzione ritorna con l’istruzione return viene rimosso il record.
Un record di attivazione contiene i valori dei parametri, delle variabili e del ritorno dell’ istanza della funzione.
Analizziamo il seguente codice, mettendo in pratica quanto imparato:
#include <stdio.h>
int somma( int, int, int);
int main(){
int s1 = somma(10, 20, 30);
int s2 = somma(5, 10, 15);
return 0;
}
int somma(int x, int y, int z){
int risultato = x + y + z;
return risultato;
}
La rappresentazione dello stack sarà la seguente.
L’ Heap è una porzione di memoria che contiene delle variabili e costituisce la memoria dinamica del programma.Per creare queste variabili bisognerà allocarle con la funzione malloc, mentre per accedervi dal nostro codice sarà necessario utilizzare i puntatori che tratteremo più avanti. A differenza dello stack, l’heap non ha dimensione fissa, quindi può aumentare o diminuire nel tempo.