Sobes.tech
Junior

Kur saugomi objektai atmintyje?

sobes.tech AI

Atsakymas iš AI

Atmintyje objektai saugomi skirtingose srityse, priklausomai nuo jų tipo, gyvavimo laiko ir pasirinktos programavimo kalbos/vykdymo aplinkos. Pagrindinės sritys:

  • Kaušas (Heap): Dinamiškai paskirta atmintis objektams, kurių gyvavimo laikas nėra nustatomas kompiliatoriaus kompilacijos metu. Atminties valdymas kauše vykdomas šiukšlių rinkėjo (automatinės valdymo kalbose) arba rankiniu būdu (be jo kalbose).
  • Stekas (Stack): Naudojamas primityvių duomenų tipų (visų skaičių, loginės reikšmės), nuorodų į objektus kauše, vietinių kintamųjų ir funkcijų iškvietimų informacijos saugojimui. Steko atmintis automatiškai paskiriama ir atlaisvinama įėjimo ir išėjimo iš kodo bloko/funkcijos metu.
  • Statinė sritis (Static/Global Data Segment): Saugo statinius ir globalius kintamuosius. Šių kintamųjų gyvavimo laikas sutampa su programos gyvavimo laiku.

Objektų orientuotose kalbose pati nuoroda į objektą saugoma steke (arba kauše, jei nuoroda yra kito objekto laukas), o pats objektas ir jo duomenys - kauše.

Pavyzdys Java:

class MyObject {
    int value; // Objekto laukas
}

public class Main {
    public static void main(String[] args) {
        int primitiveVar = 10; // primitiveVar saugomas steke
        MyObject objRef = new MyObject(); // objRef (nuoroda) saugoma steke, new MyObject() (duomenys) - kauše
        objRef.value = 20; // Prieiga prie objekto duomenų kauše
    }
}

C++ pavyzdys:

#include <iostream>

class MyObject {
public:
    int value;
};

int globalVar = 5; // globalus kintamasis saugomas statinėje srityje

int main() {
    int localVar = 10; // localVar saugomas steke
    MyObject stackObj; // stackObj (objektas) saugomas steke
    stackObj.value = 15;

    MyObject* heapObj = new MyObject(); // heapObj (nuoroda) saugoma steke, new MyObject() (objektas) - kauše
    heapObj->value = 20;

    delete heapObj; // rankiniu būdu atlaisvinama atmintis kauše
    return 0;
}

Lyginamoji lentelė:

Atminties sritis Paskirtis Gyvavimo laikas Atminties valdymas
Stekas Primitivūs tipai, nuorodos, vietinės kintamosios Funkcijos blokas Automatinis
Kaušas Objektai, dinamiškos duomenų struktūros Iki aiškiai atlaisvinimo/arba šiukšlių rinkėjo Automatinis (šiukšlių rinkėjas) arba rankinis
Statinė sritis Statiniai ir globalūs kintamieji Programos gyvavimo laikas Automatinis