Sobes.tech
Junior

Kus mälus hoitakse objekte?

sobes.tech AI

Vastus AI-lt

Objektid mälus salvestatakse erinevates piirkondades, sõltuvalt nende tüübist, elueast ja valitud programmeerimiskeelest/teostuskeskkonnast. Peamised piirkonnad:

  • Hajus (Heap): Dynaamiliselt eraldatud mälu objektidele, mille eluaeg ei ole määratud kompilaatori poolt kompileerimise ajal. Mälu haldamine hajus toimub prügikoristaja (automaatse halduse keeltes) või käsitsi (ilma selleta keeltes).
  • Köis (Stack): Kasutatakse primitiivsete andmetüüpide (täisarvud, loogilised väärtused), viidete hoidmiseks objektidele hajas, kohalike muutujate ja funktsioonikutsumiste teabe salvestamiseks. Köie mälu eraldatakse ja vabastatakse automaatselt koodi/bloki sisenemisel ja väljumisel.
  • Statiline piirkond (Static/Global Data Segment): Hoidke staatilisi ja globaalseid muutujaid. Nende muutuja eluaeg vastab programmi elueale.

Objektorienteeritud keeltes hoitakse viidet objekti kohta köiel (või hajas, kui viide on teise objekti väli), samas kui objekt ja selle andmed asuvad hajas.

Näide Java keeles:

class MyObject {
    int value; // Objekti väli
}

public class Main {
    public static void main(String[] args) {
        int primitiivneMuuttuja = 10; // primitiivneMuuttuja asub köiel
        MyObject objViide = new MyObject(); // objViide (viide) asub köiel, new MyObject() (andmed) asub hajas
        objViide.value = 20; // Juurdepääs objekti andmetele hajas
    }
}

C++ näide:

#include <iostream>

class MyObject {
public:
    int value;
};

int globaalMuuttuja = 5; // globaalse muutuja asub statilises piirkonnas

int main() {
    int kohalikMuuttuja = 10; // kohalikMuuttuja asub köiel
    MyObject stackObj; // stackObj (objekt) asub köiel
    stackObj.value = 15;

    MyObject* hajasObj = new MyObject(); // hajasObj (viit) asub köiel, new MyObject() (objekt) asub hajas
    hajasObj->value = 20;

    delete hajasObj; // käsitsi vabastab hajas oleva objekti
    return 0;
}

Võrdlustabel:

Mälu piirkond Otstarve Eluaeg Mälu haldamine
Köis Primitiivsed tüübid, viited, kohalikud muutujad Funktsiooni blokk Automaatne
Hajus Objekti, dünaamilised andmestruktuurid Kuni selgelt vabastamiseni või prügikoristajani Automaatne (prügikoristaja) või käsitsi
Statiline piirkond Statilised ja globaalsed muutujad Programmi eluaeg Automaatne