Gestione della memoria in C

2019-12-26

In questo tutorial vedremo come C gestisce la memoria del computer.

Unità di informazione

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).

bit

Un altra unita fondamentale è il byte, costituito da 8 bit. In esso è possibile salvare un valore numerico da 0 a 255.

byte

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.

word

Memoria nel computer

Arriviamo ora alla memoria del computer, che è organizzata in word. Ogni word ha un indirizzo di memoria che aumenta di bit in bit.

memoria del computer

Quando eseguiamo un programma in C una parte di memoria viene dedicata al nostro programma, questa si divide in due parti: stack e heap.

memoria c del computer

Stack e Record di Attivazione

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.

stack memoria c

Un record di attivazione contiene i valori dei parametri, delle variabili e del ritorno dell’ istanza della funzione.

record di attivazione c

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.

stack con record di attivazione c

Heap

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.

heap c