Junior
Unde sunt stocate obiectele în memorie?
sobes.tech AI
Răspuns de la AI
Obiectele din memorie sunt stocate în diferite zone, în funcție de tipul lor, durata de viață și limbajul de programare/mediu de execuție ales. Zonele principale:
- Heap (Heap): Memorie alocată dinamic pentru obiecte a căror durată de viață nu este determinată de compilator în etapa de compilare. Gestionarea memoriei în heap se face prin colectorul de gunoi (în limbaje cu gestionare automată) sau manual.
- Stivă (Stack): Folosită pentru stocarea tipurilor primitive (numere întregi, valori booleene), referințe la obiecte din heap, variabile locale și informații despre apelurile de funcții. Memoria pe stivă este alocată și eliberată automat la intrarea și ieșirea din blocuri de cod/functii.
- Zona statică (Segmentul de date statice/global): Stochează variabile statice și globale. Durata de viață a acestor variabile corespunde cu durata de viață a programului.
În limbajele orientate pe obiecte, referința la obiect este stocată pe stivă (sau în heap, dacă referința este un câmp al altui obiect), iar obiectul și datele sale se află în heap.
Exemplu în Java:
class MyObject {
int value; // Câmpul obiectului
}
public class Main {
public static void main(String[] args) {
int primitiveVar = 10; // primitiveVar este stocat pe stivă
MyObject objRef = new MyObject(); // objRef (referință) este stocată pe stivă, obiectul new MyObject() (date) este stocat în heap
objRef.value = 20; // Accesarea datelor obiectului în heap
}
}
În C++:
#include <iostream>
class MyObject {
public:
int value;
};
int globalVar = 5; // globalVar este stocat în zona statică
int main() {
int localVar = 10; // localVar este stocat pe stivă
MyObject stackObj; // stackObj (obiect) este stocat pe stivă
stackObj.value = 15;
MyObject* heapObj = new MyObject(); // heapObj (pointer) este stocat pe stivă, new MyObject() (obiect) este stocat în heap
heapObj->value = 20;
delete heapObj; // Eliberarea manuală a memoriei în heap
return 0;
}
Tabel comparativ:
| Zonă de memorie | Scop | Durată de viață | Gestionarea memoriei |
|---|---|---|---|
| Stivă | Tipuri primitive, referințe, variabile locale | Bloc de cod/functie | Automată |
| Heap | Obiecte, structuri de date dinamice | Până la eliberarea explicită/garbage collector | Automată (garbage collector) sau manuală |
| Zona statică | Variabile statice și globale | Durata de viață a programului | Automată |