Junior
Kde sú objekty uložené v pamäti?
sobes.tech AI
Odpoveď od AI
Objekty v pamäti sa ukladajú v rôznych oblastiach v závislosti od ich typu, doby života a zvoleného programovacieho jazyka/prostredia na vykonávanie. Hlavné oblasti:
- Heap (Heap): Dynamicky alokovaná pamäť pre objekty, ktorých doba života nie je určená kompilátorom počas kompilácie. Správa pamäti na heap-e je zabezpečená garbage collectorem (v jazykoch s automatickou správou) alebo ručne (v jazykoch bez toho).
- Stack (Stack): Používa sa na ukladanie primitivnych typov dát (celé čísla, logické hodnoty), odkazov na objekty na heap-e, lokálnych premenných a informácií o volaniach funkcií. Pamäť na stack-e sa automaticky alokuje a uvoľňuje pri vstupe a výstupe z bloku kódu/funkcie.
- Statická oblasť (Static/Global Data Segment): Uchováva statické a globálne premenné. Doba života týchto premenných zodpovedá dobe života programu.
V objektovo orientovaných jazykoch je samotná odkaz na objekt uložený na stacku (alebo v heap-e, ak je odkaz políčkom iného objektu), zatiaľ čo objekt a jeho dáta sú v heap-e.
Príklad v jazyku Java:
class MyObject {
int value; // Pole objektu
}
public class Main {
public static void main(String[] args) {
int primitiveVar = 10; // primitiveVar je na stacku
MyObject objRef = new MyObject(); // objRef (odkaz) je na stacku, objekt new MyObject() (dáta) je v heap-e
objRef.value = 20; // Prístup k dátam objektu v heap-e
}
}
V jazyku C++:
#include <iostream>
class MyObject {
public:
int value;
};
int globalVar = 5; // globalVar je v statickej oblasti
int main() {
int localVar = 10; // localVar je na stacku
MyObject stackObj; // stackObj (objekt) je na stacku
stackObj.value = 15;
MyObject* heapObj = new MyObject(); // heapObj (ukazovateľ) je na stacku, new MyObject() (objekt) je v heap-e
heapObj->value = 20;
delete heapObj; // Ručné uvoľnenie pamäti v heap-e
return 0;
}
Porovnávacia tabuľka:
| Oblasť pamäti | Účel | Doba života | Správa pamäti |
|---|---|---|---|
| Stack | Primitívne typy, odkazy, lokálne prom. | Blok kódu/funkcia | Automatická |
| Heap | Objekty, dynamické dátové štruktúry | Do explicitného uvoľnenia/garbage collectora | Automatická (garbage collector) alebo ručne |
| Statická oblasť | Statické a globálne prom. | Doba života programu | Automatická |