Чӣ гуна интихобҳо дар ёддошт нигоҳ дошта мешаванд?
sobes.tech AI
Ҷавоб аз AI
Swift-да опционал икки ҳолатдан иборат enumerationни англатади: .none (ёки nil) ва .some(Wrapped).
enum Optional<Wrapped> {
case none
case some(Wrapped)
}
Агар опционал қиймат сақласа (.some(Wrapped)), у Wrapped туридаги қийматни ва қўшимча бир битни сақлайди, бу бит қийматнинг мавжудлигини кўрсатади. Агар опционал nil бўлса (.none), фақат шу бит ёки махсус байт намунаси сақланади, бу қийматнинг йўқлигини кўрсатади.
Сақлаш усули Wrapped туридан ва процессор архитектурасидан (32-бит ёки 64-бит) боғлиқ бўлиши мумкин, аммо умумий ғоя — қийматнинг мавжудлигини кўрсатувчи индикатордан фойдаланиш. Ҳаволалар турлари учун, масалан, nil нулли кўрсаткич билан ифода этилиши мумкин, агар индикатор керак бўлмаса ёки у билан бирлаштирилган бўлса. Қиймат турлари учун қўшимча жой керак.
64-бит архитектура ва индикатор билан мисол:
- Агар
Optional<T>қиймат сақласа:Tучун хотира + 1 бит (ёки байт) "қиймат мавжуд" индикатори учун. - Агар
Optional<T>nilбўлса: одатда махсус байт намунаси ёки ҳаволани кўрсаткич билан бирлаштирилади.
Маҳмулот: турлар, уларнинг ўлчами ўзининг табиий тартибидан кичик бўлса (масалан, Bool 64-бит тизимда), мавжудлик индикатори "ўзгартирилган" бўлиши мумкин, бу ёдлашни тежайди. Бу оптимизация "Nullable Pointer Optimization" деб аталади ва баъзи қиймат турлари учун ҳам шундай амалга оширилади.