Un modello di memoria è l'insieme di regole che definisce come il software si aspetta che la memoria si comporti: come i valori vengono memorizzati, letti, aggiornati e visti dalle diverse parti di un programma. È un'astrazione, non la macchina fisica stessa. Linguaggi, compilatori e CPU diversi possono seguire regole diverse su ordinamento, visibilità e coerenza.
Questo è importante nella sicurezza informatica perché molti bug iniziano quando il codice si basa su ipotesi che il modello di memoria non garantisce. Condizioni di race, letture obsolete e sincronizzazione errata possono far comportare i programmi in modo imprevedibile, soprattutto nel codice multithread o di basso livello. Gli aggressori possono talvolta sfruttare queste debolezze per causare crash, aggirare i controlli o influenzare la logica del programma. I difensori usano una chiara comprensione del modello di memoria per scrivere codice concorrente sicuro, scegliere il corretto locking o le operazioni atomiche ed evitare assunzioni pericolose su quando le modifiche ai dati diventano visibili.


