Sobes.tech
Junior

Hol tárolódnak a tárgyak a memóriában?

sobes.tech MI

Válasz az MI-től

A memóriaobjektumokat különböző területeken tárolják, a típusuktól, az életidejüktől és a választott programozási nyelvtől/ végrehajtási környezettől függően. Fő területek:

  • Heap (Heap): Dinamikusan allokált memória az olyan objektumok számára, amelyek életidejét nem határozza meg a fordító a fordítási szakaszban. A memória kezelés a heap-en automatikus gyűjtővel (garbage collector) vagy manuálisan történik.
  • Stack (Verem): Az primitív típusok (egész számok, logikai értékek), a heap-en lévő objektumokra mutató hivatkozások, helyi változók és függvényhívási információk tárolására szolgál. A verem memóriája automatikusan allokálódik és felszabadul a kódrészletek/függvények belépésekor és kilépésekor.
  • Statikus terület (Statikus adatszegmens): Statikus és globális változókat tartalmaz. Ezek életideje megegyezik a program életidejével.

Objektumorientált nyelvekben a referencia az objektumra a veremben (vagy a heap-en, ha a referencia egy másik objektum mezője) tárolódik, míg maga az objektum és adatai a heap-en találhatók.

Java példával:

class MyObject {
    int value; // Objektum mező
}

public class Main {
    public static void main(String[] args) {
        int primitiveVar = 10; // primitiveVar a veremben tárolódik
        MyObject objRef = new MyObject(); // objRef (referencia) a veremben, a new MyObject() (adatok) a heap-en
        objRef.value = 20; // Hozzáférés az adatokhoz a heap-en
    }
}

C++ példával:

#include <iostream>

class MyObject {
public:
    int value;
};

int globalVar = 5; // globális változó a statikus szegmensben

int main() {
    int localVar = 10; // helyi változó a veremben
    MyObject stackObj; // objektum a veremben
    stackObj.value = 15;

    MyObject* heapObj = new MyObject(); // pointer a veremben, az objektum a heap-en
    heapObj->value = 20;

    delete heapObj; // manuális memóriafelszabadítás a heap-en
    return 0;
}

Összehasonlító táblázat:

Memória terület Cél Életciklus Memória kezelés
Verem (Stack) Primitív típusok, hivatkozások, helyi változók Kódblokk/függvény Automatikus
Heap Objektumok, dinamikus adatszerkezetek Kifejezetten felszabadításig/garbage collector Automatikus (gyűjtő) vagy manuális
Statikus terület Statikus és globális változók Program életciklusa Automatikus