Sobes.tech
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-га

Шу тарзда, слайс ҳажми экспоненциал равишда ўсади, бу эса элементлар қўшишнинг самарадорлигини оптималлаштиради.