Sobes.tech
Junior

Gde se objekti čuvaju u memoriji?

sobes.tech АИ

Одговор од АИ

Objekti u memoriji se čuvaju u različitim oblastima u zavisnosti od njihovog tipa, vremena života i odabranog programskog jezika/okruženja za izvršavanje. Glavne oblasti:

  • Heap (Heap): Dinamički alocirana memorija za objekte čiji životni vek nije određen od strane kompajlera tokom kompilacije. Upravljanje memorijom na heap-u vrši se od strane sakupljača smeća (u jezicima sa automatskim upravljanjem) ili ručno (u jezicima bez toga).
  • Stack (Stek): Koristi se za skladištenje primitivnih tipova podataka (celih brojeva, logičkih vrednosti), referenci na objekte na heap-u, lokalnih promenljivih i informacija o pozivima funkcija. Memorija na steku se automatski alocira i oslobađa pri ulasku i izlasku iz bloka koda/funkcije.
  • Staticna oblast (Static/Global Data Segment): Čuva statičke i globalne promenljive. Vreme života ovih promenljivih odgovara vremenu života programa.

U objektno-orijentisanim jezicima, sama referenca na objekat se čuva na steku (ili u heap-u, ako je referenca polje drugog objekta), a sam objekat i njegovi podaci su u heap-u.

Primer na Javi:

class MyObject {
    int value; // Polje objekta
}

public class Main {
    public static void main(String[] args) {
        int primitiveVar = 10; // primitiveVar se čuva na steku
        MyObject objRef = new MyObject(); // objRef (referenca) se čuva na steku, objekat new MyObject() (podatak) se čuva u heap-u
        objRef.value = 20; // Pristup podacima objekta u heap-u
    }
}

U C++:

#include <iostream>

class MyObject {
public:
    int value;
};

int globalVar = 5; // globalVar se čuva u statičkom segmentu

int main() {
    int localVar = 10; // localVar se čuva na steku
    MyObject stackObj; // stackObj (objekat) se čuva na steku
    stackObj.value = 15;

    MyObject* heapObj = new MyObject(); // heapObj (pokazivač) se čuva na steku, new MyObject() (objekat) se čuva u heap-u
    heapObj->value = 20;

    delete heapObj; // Ručno oslobađanje memorije u heap-u
    return 0;
}

Tabela poređenja:

Oblast memorije Namenjenje Vreme trajanja Upravljanje memorijom
Stek Primitivni tipovi, reference, lokalne promenljive Blok/funkcija Automatski
Heap Objekti, dinamičke strukture podataka Do eksplicitnog oslobađanja/sakupljača smeća Automatski (sakupljač smeća) ili ručno
Staticka oblast Staticke i globalne promenljive Vreme trajanja programa Automatski