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