Sobes.tech
Senior

Вақте ки слайс дар дохили функсия дар ҳоле ки capacity-ро убур мекунад, дар куҷо эълон мешавад: дар heap ё дар stack?

sobes.tech AI

Ҷавоб аз AI

Дар Go, слайс — структура, ки дар он ишора ба массив, дарозӣ ва қобилияти нигоҳдорӣ мавҷуд аст. Вақте ки шумо элементҳоро илова мекунед ва аз қобилияти ҳозираи слайс мегузаред, массиви нав бо қобилияти зиёдтар ҷудо карда мешавад.

Ин массиви нав дар heap ҷудо карда мешавад, на дар stack, зеро андоза ва давомнокии он дар вақти компилятсия муайян карда намешавад. Пас аз он, слайс дар дохили функсия ба ин массиви нав ишора мекунад.

Масалан:

func appendElement(s []int, val int) []int {
    s = append(s, val) // агар қобилият кофӣ набошад, массиви нав дар heap ҷудо карда мешавад
    return s
}

Бинобар ин, вақте ки қобилият мегузарад, слайс бо массиви нав, ки дар heap ҷойгир аст, дубора эълон мешавад.