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 |