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 |