Middle
Kus mälus hoitakse objekte?
sobes.tech AI
Vastus AI-lt
Objekti mäluhoones tavaliselt hoitakse virnas (heap).
Virn on mälu piirkond, kus dünaamiliselt eraldatakse objekte programmi täitmise ajal. Objektide eluea pikkus virnas määratakse prügikoristaja (kui see on keeles olemas) või selge mälu vabastamisega.
Erinevalt virnast, salvestatakse kohalikke primitiivseid tüüpe, viiteid objektidele ja funktsioonikõnesid virnas (stack). Virna suurus on fikseeritud või piiratud ning andmed virnas eemaldatakse väljudes vaateväljast.
| Võrdlus | Virn (Heap) | Virn (Stack) |
|---|---|---|
| Eesmärk | Objektide, massiivide salvestamine | Primitiivsete tüüpide, viidete salvestamine |
| Vabastamine | Düsnaamiline | Automaatne |
| Hallatavus | Prügikoristaja / Selge vabastamine | Automaatne |
| Kiirus | Aeglasem | Kiirem |
| Suurus | Paindlik, võib olla suur | Fikseeritud / Piiratud |
Näide Java-st:
// Virnas hoitakse viidet 'myObject'
MyClass myObject = new MyClass(); // Objekti MyClass hoitakse virnas
int arv = 10; // Muutuja arv (primitiivne) hoitakse virnas
Näide Python-st:
# Muutuja 'my_list' virnas, ise nimekiri on virnas
my_list = [1, 2, 3]
# Muutuja 'name' virnas (viide), string on virnas
name = "Alice"
age = 30 # Täisarv võib olla kas virnas (väikeste väärtuste puhul) või virnas (sõltuvalt Python-i rakendusest)
Konkreetsed asukohad võivad sõltuda programmeerimiskeelest, selle jooksutõrke keskkonnast ja arhitektuurist (näiteks escape analüüsi kasutamisel võib objekt olla virnas isegi viidetüübi puhul, RUST).