Middle
როგორ იცვლება ფურცლის მოცულობა მისი გაფართოებისას?
sobes.tech AI
პასუხი AI-სგან
Go-да, slice — бу массивга ишора қилувчи, узунлиги ва ҳажми бўлган тузилма. append ёрдамида элементлар қўшилганда, агар slice узунлиги унинг ҳозирги ҳажмга етаётган бўлса, хотира қайта тақсимланади: янгича, ҳажми оширилган массив яратилади ва маълумотлар унга кўчирилади.
Ҳажмни ўзгартириш қоидалари қатъий белгиланмаган, аммо одатда:
- Кичик slice’лар учун (1024 элементгача) ҳажм икки баробар оширилади.
- Катта slice’лар учун ўсиш кўпроқ сақланади (taxminan 25% ҳозирги ҳажмдан).
Бу хотирадан фойдаланиш ва алоқалар орасида мувозанат ўрнатишга имкон беради.
Масалан:
s := make([]int, 0, 2) // узунлиги 0, ҳажми 2
s = append(s, 1) // узунлиги 1, ҳажми 2
s = append(s, 2) // узунлиги 2, ҳажми 2
s = append(s, 3) // узунлиги 3, ҳажм ошади, масалан, 4-га
Шу тарзда, слайс ҳажми экспоненциал равишда ўсади, бу эса элементлар қўшишнинг самарадорлигини оптималлаштиради.