Stocarea tuturor datelor în registre ar face ca majoritatea procesoarelor să fie prea complicate (și foarte costisitoare). Prin urmare, registrele stochează, de obicei, doar datele la care lucrează "în acest moment" procesorul. Restul datelor utilizate de program sunt stocate în memoria RAM (Random Access Memory). Cu excepția microcontrolerelor, memoria RAM este de obicei stocată în afara procesorului, în cipuri separate.
Atunci când unitatea centrală de procesare dorește să citească sau să scrie date în memoria RAM, aceasta emite o adresă către datele respective. Fiecare octet din RAM are o adresă de memorie. Dimensiunea adreselor este adesea aceeași cu dimensiunea cuvântului: Un CPU pe 32 de biți utilizează adrese pe 32 de biți etc. Cu toate acestea, unitățile centrale mai mici, cum ar fi unitățile centrale pe 8 biți, utilizează adesea adrese care sunt mai mari decât dimensiunea cuvântului. În caz contrar, lungimea maximă a programului ar fi prea mică.
Deoarece dimensiunea adreselor este limitată, cantitatea maximă de memorie este, de asemenea, limitată. Procesoarele pe 32 de biți pot gestiona, de obicei, doar până la 4 GB de memorie RAM. Acesta este numărul de octeți diferiți care pot fi selectați cu ajutorul unei adrese pe 32 de biți (fiecare bit poate avea două valori-0 și 1-și 232 octeți înseamnă 4 GB). Un procesor pe 64 de biți ar putea gestiona până la 16 EB de RAM (16 exabytes, aproximativ 16 miliarde GB sau 16 miliarde de miliarde de miliarde de bytes). Sistemul de operare îl poate limita la utilizarea unor cantități mai mici.
Informațiile stocate în memoria RAM sunt, de obicei, volatile. Acest lucru înseamnă că vor dispărea în cazul în care calculatorul este oprit.
Unități de gestionare a memoriei (MMU) și memorie virtuală
Unitățile centrale de procesare moderne utilizează adesea o unitate de gestionare a memoriei (MMU). O MMU este o componentă care traduce adresele din CPU în (de obicei) diferite adrese de memorie RAM. Atunci când se utilizează o MMU, adresele utilizate într-un program nu sunt (de obicei) adresele "reale" la care sunt stocate datele. Aceasta se numește memorie virtuală (opusul celei "reale"). Câteva dintre motivele pentru care este bine să aveți o MMU sunt enumerate aici:
- O MMU poate "ascunde" memoria altor programe de un program. Acest lucru se realizează prin faptul că nu traduce nicio adresă la adresele "ascunse" în timp ce programul este în curs de execuție. Acest lucru este bun, deoarece înseamnă că programele nu pot citi și modifica memoria altor programe, ceea ce îmbunătățește securitatea și stabilitatea. (Programele nu se pot "spiona" unele pe altele, sau "călca pe degetele de la picioare" ale altora).
- Multe MMU pot face ca unele părți ale memoriei să nu poată fi scrise, citite sau executate (ceea ce înseamnă că codul stocat în acea parte a memoriei nu poate fi rulat). Acest lucru poate fi bun din motive de stabilitate și de securitate, precum și din alte motive.
- MMU permit ca diferite programe să aibă "vederi" diferite ale memoriei. Acest lucru este util în multe situații diferite. De exemplu, va fi întotdeauna posibil ca codul "principal" al unui program să se afle la aceeași adresă (virtuală) fără a intra în coliziune cu alte programe. De asemenea, acest lucru este util atunci când există multe fragmente diferite de cod (din biblioteci) care sunt partajate între programe.
- MMU permit codului din biblioteci să apară la adrese diferite de fiecare dată când un program este rulat. Acest lucru este bun, deoarece, dacă nu se știe unde se află lucrurile în memorie, este mai greu pentru hackeri să facă programele să facă lucruri rele. Acest lucru se numește randomizare a spațiului de adrese.
- Programele avansate și sistemele de operare pot folosi trucuri cu MMU pentru a evita copierea datelor între diferite locuri din memorie.