Junior
Yadda yaddaşda yığın və yığım istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
Yığım, yerli dəyişənləri, funksiyaların parametrlərini və geri dönüş ünvanlarını saxlamaq üçün istifadə olunur. Yaddaş avtomatik olaraq LIFO (Last-In, First-Out) prinsipi ilə ayrılır və azad edilir.
Yığım (Heap), tərtib zamanı məlum olmayan və ya yaradıldıqdan sonra ömrü bitən obyektlər üçün dinamik yaddaş ayırmaq üçün istifadə olunur. Yaddaşın idarə olunması əl ilə və ya yaddaş idarəetmə mexanizmləri (Swift-də ARC, digər dillərdə çöp toplayıcı) vasitəsilə həyata keçirilir.
| Xüsusiyyət | Yığım (Stack) | Yığım (Heap) |
|---|---|---|
| Ayırma | Avtomatik | Dinamik (əl ilə və ya MRC/ARC ilə) |
| Azad etmə | Scope-dan çıxarkən avtomatik | Əl ilə (free) və ya MRC/ARC ilə |
| Məlumatların ölçüsü | Tərtib zamanı məlum olur | İcra zamanı məlum olmaya bilər |
| Əlçatanlıq | Sürətli, ardıcıl | Daha yavaş, təsadüfi |
| Struktura | LIFO | Obyekt qrafı |
| Nümunələr | Yerli dəyişənlər, funksiyaların parametrləri | Sinif obyektləri, dəyişkən ölçülü strukturlar |
// Swift-də yığım və yığım (heap) istifadəsi nümunəsi
func myFunction() {
// Yığımda yerli dəyişən
var stackVariable: Int = 10
// Yığımda sinif obyekti
let heapObject = MyClass()
// Qiymət tipi yığında (referans tiplərini ehtiva etməyən strukturlar istisna olmaqla)
var stackStruct = MyStruct()
// Referans tiplərini ehtiva edən struktur, bir hissəsi yığımda ola bilər
var mixedStruct = MyMixedStruct()
}
class MyClass {
// Obyektin xüsusiyyətləri yığımda saxlanılır
var property: String = "Hello"
}
struct MyStruct {
// Qiymət tipi xüsusiyyətləri yığında saxlanılır
var property: Int = 20
}
class MyReferenceType {
var value: Int = 30
}
struct MyMixedStruct {
// Yığımda qiymət tipi
var stackProperty: Int = 40
// Yığımda referans tipi (öz referansı yığında)
var heapReference: MyReferenceType = MyReferenceType()
}