Объектҳо дар ёддошт дар куҷо нигоҳ дошта мешаванд?
sobes.tech AI
Ҷавоб аз AI
Объектҳо дар ёддошт одатан дар хӯла (heap) нигоҳ дошта мешаванд.
Хӯла як минтақаи ёддошт аст, ки дар он объектҳо дар вақти иҷрои барнома динамикӣ тақсим мешаванд. Мӯҳлати зиндагии объектҳо дар хӯла аз ҷониби ҷамъкунандаи партов (агар дар забон вуҷуд дошта бошад) ё аз ҷониби озодкунии ошкоронаи ёддошт муайян карда мешавад.
Барои фарқ кардан, дар стеки (stack) тағйирёбандаҳои маҳаллӣ аз намудҳои primitives, ишораҳо ба объектҳо ва маълумот дар бораи даъвати функсияҳо нигоҳ дошта мешаванд. Андозаи стеки муқарраршуда ё маҳдуд аст ва маълумот дар стеки ҳангоми хориҷ шудан аз доираи амалия тоза мешавад.
| Фарқият | Хӯла (Heap) | Стек (Stack) |
|---|---|---|
| Мақсад | нигоҳдории объектҳо, массивҳо | нигоҳдории primitives, ишораҳо |
| Таъин | Динамикӣ | Автоматӣ |
| Идоракунӣ | Ҷамъкунандаи партов / ошкоро | Автоматӣ |
| Туро | Баъзан сусттар | Беҳтартар |
| Андоза | Флексибл, метавонад калон бошад | Муайян / маҳдуд |
Масалан дар Java:
// Дар стеки ишора 'myObject' нигоҳ дошта мешавад
MyClass myObject = new MyClass(); // Объекти MyClass дар хӯла нигоҳ дошта мешавад
int count = 10; // Тағйирёбандаи 'count' (примитив) дар стеки нигоҳ дошта мешавад
Масалан дар Python:
# Тағйирёбандаи 'my_list' дар стеки, рӯйхат дар хӯла
my_list = [1, 2, 3]
# Тағйирёбандаи 'name' дар стеки (ишора), сатр дар хӯла
name = "Alice"
age = 30 # Сеҷоии адад метавонад дар стеки (бароҳои хурд) ё дар хӯла (ба вобастагӣ аз иҷрои Python) бошад
Ҷойгиршавии мушаххас метавонад аз забони барномасозӣ, муҳити иҷроиш ва архитектура вобаста бошад (масалан, дар истифодаи таҳлили фирор, объект метавонад дар стеки ҳатто барои намудҳои ишорашуда ҷойгир шавад, RUST).