In relazione ai computer, un indirizzo di memoria è un valore numerico che fa riferimento a un singolo elemento di dato all’interno di un supporto di memorizzazione. La posizione della memoria del computer potrebbe essere all’interno della memoria ad accesso casuale (RAM) di un computer, sul disco rigido o sul file system o anche su un dispositivo di archiviazione temporaneo utilizzato come forma di memoria virtuale quando la memoria di sistema disponibile è insufficiente . La dimensione della posizione di memoria dipende dall’architettura del sistema informatico o del dispositivo, ma generalmente varia da un byte a 8 bit a un numero intero a 64 bit. Esistono diversi metodi utilizzati per accedere e gestire la memoria, molti dei quali utilizzano un componente hardware noto come unità di gestione della memoria (MMU), mentre altri si affidano completamente al software. Tutti i sistemi hanno un limite all’indirizzo di memoria massimo a cui è possibile accedere, che di solito è la dimensione massima del tipo intero più grande disponibile sul sistema.
Il tipo più comune di indirizzo di memoria si riferisce a una posizione all’interno della memoria RAM del sistema informatico, che fornisce un accesso rapido ai dati che cambiano dinamicamente. Le informazioni effettive archiviate nella memoria del computer possono variare da dati grezzi come numeri o documenti di testo che vengono modificati o visualizzati, al codice del programma effettivo archiviato in indirizzi di memoria specifici mentre viene eseguito. Quando un programma ha completato l’esecuzione, le informazioni sull’indirizzo di memoria in uso diventano non valide poiché la RAM viene liberata per essere utilizzata dal programma successivo.
Con il progredire della tecnologia, il termine “indirizzo di memoria” è cambiato e, a partire dal 2011, non si riferisce sempre a un indirizzo fisico effettivo. Invece, può fare riferimento a una posizione che può essere risolta dalla MMU di un computer o dispositivo. Ciò significa che la MMU fornisce un livello di astrazione tra un programmatore e un programma, consentendo invece al sistema operativo o ad altro hardware di gestire il movimento e l’allocazione della memoria come meglio crede. La traduzione intermedia di un indirizzo di memoria significa che il programmatore non ha bisogno di apprendere un nuovo schema di memoria o modificare il codice sorgente per diversi tipi di architetture di computer.
In molti sistemi informatici e sistemi operativi, un indirizzo di memoria potrebbe non sempre fare riferimento a dati o codice in memoria. Esistono schemi in cui un indirizzo potrebbe fare riferimento a un punto di ingresso o di uscita per un dispositivo periferico come un monitor o un dispositivo virtuale come un socket. In questi casi, le informazioni che si trovano a un indirizzo specifico vengono effettivamente trasmesse al dispositivo hardware che rappresenta. Questo può essere un modo incredibilmente efficiente per accedere a un dispositivo come una stampante, ma può anche portare a gravi vulnerabilità e confusione durante il debug di un programma.