Sobes.tech
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ă