Junior
Kde jsou objekty uloženy v paměti?
sobes.tech AI
Odpověď od AI
Objekty v paměti jsou uloženy v různých oblastech v závislosti na jejich typu, době života a zvoleném programovacím jazyce/prostředí. Hlavní oblasti:
- Hromada (Heap): Dynamicky alokovaná paměť pro objekty, jejichž doba života není určena kompilátorem při kompilaci. Správa paměti na hromadě je zajištěna garbage collectorem (v jazycích s automatickou správou) nebo ručně (v jazycích bez něj).
- Zásobník (Stack): Používá se pro ukládání primitivních datových typů (celá čísla, logické hodnoty), odkazů na objekty na hromadě, lokálních proměnných a informací o volání funkcí. Paměť na zásobníku je automaticky alokována a uvolňována při vstupu a výstupu z bloku kódu/funkce.
- Statická oblast (Static/Global Data Segment): Uchovává statické a globální proměnné. Doba života těchto proměnných odpovídá době života programu.
V objektově orientovaných jazycích je samotná odkaz na objekt uložena na zásobníku (nebo na hromadě, pokud je odkaz polem jiného objektu), zatímco objekt a jeho data jsou v hromadě.
Příklad v jazyce Java:
class MyObject {
int value; // Pole objektu
}
public class Main {
public static void main(String[] args) {
int primitiveVar = 10; // primitiveVar je na zásobníku
MyObject objRef = new MyObject(); // objRef (odkaz) je na zásobníku, objekt new MyObject() (data) je v hromadě
objRef.value = 20; // Přístup k datům objektu v hromadě
}
}
V jazyce C++:
#include <iostream>
class MyObject {
public:
int value;
};
int globalVar = 5; // globalVar je v statické oblasti
int main() {
int localVar = 10; // localVar je na zásobníku
MyObject stackObj; // stackObj (objekt) je na zásobníku
stackObj.value = 15;
MyObject* heapObj = new MyObject(); // heapObj (ukazatel) je na zásobníku, new MyObject() (objekt) je v hromadě
heapObj->value = 20;
delete heapObj; // Ruční uvolnění paměti v hromadě
return 0;
}
Tabulka srovnání:
| Oblast paměti | Účel | Doba života | Správa paměti |
|---|---|---|---|
| Zásobník | Primitivní typy, odkazy, lokální proměnné | Blok kódu/funkce | Automatická |
| Hromada | Objekty, dynamické datové struktury | Do explicitního uvolnění/garbage collectoru | Automatická (garbage collector) nebo ruční |
| Statická oblast | Statické a globální proměnné | Doba života programu | Automatická |