CodeGym /Corsi /Python SELF IT /Memoria RAM e rappresentazione dei dati

Memoria RAM e rappresentazione dei dati

Python SELF IT
Livello 52 , Lezione 1
Disponibile

8.1 Memoria RAM

RAM (Memoria ad accesso casuale, RAM) del computer è un array di celle di memoria, ognuna con un indirizzo unico. Queste celle possono contenere dati di vario tipo, come numeri, simboli e puntatori. Quando un programma è in esecuzione, colloca i suoi dati e istruzioni in questa memoria per un accesso rapido.

Esempio di celle di memoria:

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79

Ogni cella ha il suo numero d'ordine, che viene anche chiamato indirizzo della cella in memoria o semplicemente indirizzo. Se il tuo computer ha 8 GB di memoria, allora ha 8 miliardi di tali celle in cui puoi memorizzare qualcosa di utile.

Bit e byte

Ogni cella può contenere un byte di informazione. Ogni byte è composto da 8 bit, e ogni bit può contenere solo 0 o 1. Esempio (per numeri interi positivi):

Numero Rappresentazione in bit Arrotondato al byte
0 0 00000000
1 1 00000001
100 1100100 01100100
1000 1111101000 00000011-11101000
1000 000 000 111011100110101100101000000000 00111011-10011010-11001010-00000000

Più byte occupa una variabile, più valori può contenere. Esempio:

  • 1 byte — 256 valori unici
  • 2 byte — 65 mila valori unici
  • 3 byte — 16 milioni
  • 4 byte — 4 miliardi

8.2 Come i dati sono rappresentati in memoria

Tipi di dati e loro rappresentazione

Dati numerici all'interno del processore e in memoria

  • Numeri interi: memorizzati in forma binaria. La dimensione può variare (1 byte, 2 byte, 4 byte).
  • Numeri reali: memorizzati in formato floating-point (ad esempio, formato IEEE 754 per numeri a 4-byte e 8-byte).

x = 42  # Numero intero
y = 3.14  # Numero reale

Importante! In Python i tipi incorporati int e float sono vere e proprie classi che possono realizzare calcoli complessi con numeri di lunghezza infinita. Tuttavia, se utilizzi librerie per il calcolo scientifico o AI, ti imbatterai nel formato di dati di cui ho parlato sopra.

Dati simbolici nella memoria del computer

Simboli e stringhe sono memorizzati in memoria come sequenze di byte. Ad esempio, nella codifica ASCII ogni simbolo occupa 1 byte, mentre nella codifica UTF-8 può occupare da 1 a 4 byte.

In Python 3.x, di default per le stringhe viene utilizzata la codifica UTF-8, ma puoi leggere file dove il testo è memorizzato in altri formati, o inviare dati tramite rete non in codifica UTF-8.

Esempio:


char = 'A'  # Simbolo
string = "Hello, world!"  # Stringa

I singoli simboli in Python non hanno un tipo proprio — si utilizza per loro anche il tipo str. Tuttavia, in memoria queste stringhe sono memorizzate simbolo per simbolo. Un simbolo solitamente occupa 1—4 byte.

Puntatori

I puntatori memorizzano indirizzi di altre celle di memoria. Permettono ai programmi di lavorare con strutture dati dinamiche e gestire la memoria in modo più efficiente.

Esempio:


list = [1, 2, 3, 4]  # Lista
list_pointer = id(list)  # Puntatore all'inizio della lista

8.3 Esempi di rappresentazione dei dati nella memoria RAM

1. Rappresentazione dei numeri interi

I numeri interi sono memorizzati in memoria come numeri binari (bit). A seconda del tipo di dati, possono occupare diverse quantità di byte. Ad esempio, int occupa solitamente 4 byte (32 bit).

Così sarà rappresentato il numero 42 in memoria:

00000000 00000000 00000000 00101010

2. Rappresentazione dei numeri reali (floating-point)

I numeri reali (ad esempio, tipo float) sono memorizzati in memoria in formato floating-point, di solito secondo lo standard IEEE 754. float occupa solitamente 4 byte (32 bit), mentre double — 8 byte (64 bit).

Importante! Questi sono tipi di dati standard, legati alla memoria e al processore. Il tipo float in Python corrisponde al tipo comunemente usato double e occupa 8 byte.

Così sarà rappresentato il numero 3.14 in memoria:

01000000 01001000 11110110 01100110

3. Rappresentazione dei simboli e delle stringhe

I simboli (ad esempio, tipo char) sono memorizzati in memoria come sequenza di byte. Le stringhe rappresentano un array di simboli. Nei linguaggi C/C++ le stringhe terminano con un byte nullo (\0), ma in Python non è così.

Così sarà rappresentata la stringa Hello in memoria:

'H' 'e' 'l' 'l' 'o'

Che a sua volta sarà rappresentato in forma di 0 e 1:

01001000 01100101 01101100 01101100 01101111

8.4 Indirizzamento della memoria dinamica

La memoria dinamica viene assegnata e liberata durante l'esecuzione del programma, secondo necessità. Tutti gli oggetti che crei in Python sono creati in questa memoria.

È divisa in 2 tipi:

Heap: Area di memoria da cui vengono allocati oggetti dinamici. La gestione di questa memoria viene effettuata tramite funzioni di allocazione (ad esempio, malloc in C) e deallocazione (ad esempio, free in C).

Stack: Area di memoria utilizzata per memorizzare variabili locali e dati di chiamata delle funzioni. La memoria viene automaticamente allocata e liberata all'ingresso e all'uscita della funzione.

Di nuovo, non posso fornire un esempio in linguaggio Python, poiché è troppo ad alto livello per tali operazioni. Posso di nuovo dare un esempio in linguaggio C:


// Allocazione dinamica della memoria per un array di 10 numeri interi
int *dynamic_var = (int *)malloc(sizeof(int) * 10); 

// Liberazione della memoria
free(dynamic_var);  

Indirizzamento della memoria — è il processo di determinazione di un indirizzo unico per ogni cella di memoria. Ogni indirizzo definisce una posizione specifica nella memoria, che può contenere dati o istruzioni.

Tipi di indirizzamento

Indirizzamento fisico: accesso diretto agli indirizzi fisici delle celle di memoria. È controllato dall'hardware (ad esempio, il controller di memoria).

Indirizzamento virtuale: utilizza un meccanismo di gestione della memoria, come la memoria paginata o segmentata, per fornire ai processi uno spazio di indirizzi isolato e protetto.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION