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