Əlavə olunan elementlərin sayı və növünə görə massiv tərəfindən istifadə olunan ümumi yaddaş nə qədər olacaq?
sobes.tech Süni İntellekt
AI-dan cavab
Array-in ümumi yaddaşı təxminən aşağıdakı hissələrdən ibarətdir:
-
Array-in ümumi xərcləri: Swift-in array-i idarə etmək üçün istifadə etdiyi daxili strukturlar (məsələn, istinad sayımı, tutum və ölçü haqqında məlumatlar). Bu xərclər sabit və ya tutuma bağlıdır.
-
Elementlərin tutduğu yaddaş: elementlərin sayı və hər bir elementin tipi ilə bağlıdır.
-
Dəyər Növləri (Value Types): məsələn,
Int,Double,Struct. Hər bir nümunə məlumatlarını birbaşa array daxilində saxlayır. Elementin yaddaş ölçüsü tipin ölçüsünə bərabərdir.// Int32-nin ölçüsü 64-bit arxitekturada 4 baytdır let intSize = MemoryLayout<Int32>.size // 4 -
İstinad Növləri (Reference Types): məsələn,
Class,String(uzun sətirlər üçün), closures. Array yalnız obyektlərə istinadları saxlayır. Element üçün yaddaş ölçüsü istinadın ölçüsünə bərabərdir (adətən 8 bayt 64-bit arxitekturada). Obyektlər özləri yığma yaddaşda saxlanılır və onların ölçüsü birbaşa array daxilində yaddaşa təsir etmir.// Obyektə istinadın ölçüsü (məsələn, sinif nümunəsinə) let referenceSize = MemoryLayout<AnyObject>.size // 8 64-bitdə
-
Təxminən formul belədir:
Ümumi yaddaş ≈ Array-in ümumi xərcləri + (Elementlərin sayı * Elementin ölçüsü)
Dəyər növləri üçün elementin ölçüsü MemoryLayout<ElementType>.size ilə, istinad növləri üçün isə MemoryLayout<AnyObject>.size ilə hesablanır.
Həmçinin, array-in tutumunun genişləndirilməsi mexanizmi də vacibdir: array hazırkı tutuma çatdıqda, Swift adətən daha böyük yeni yaddaş bloku ayırır (məsələn, iki dəfə çox) və mövcud elementləri ora köçürür. Bu, genişləndirmə əməliyyatı zamanı müvəqqəti yaddaş istifadəsinin artmasına və istifadə olunmayan yaddaşın yaranmasına (capacity - count) səbəb olur.