Junior — Middle
Как се съхраняват в паметта размерите и резервните обеми на срезовете в езика за програмиране?
sobes.tech AI
Отговор от AI
В езика Go, срезът (slice) е структура, която съдържа три основни полета:
- Държач към масива — адресът на първия елемент на среза в паметта.
- Дължина (len) — броят на елементите, достъпни за четене.
- Капацитет (cap) — максималният брой елементи, които срезът може да съдържа без да се заделя нова памет.
В паметта, срезът е представен приблизително така:
type SliceHeader struct {
Data uintptr // указател към масива
Len int // дължина на среза
Cap int // капацитет на среза
}
При създаване на срез, се заделя масив с определена капацитет. Ако при добавяне на елементи дължината превиши капацитета, се заделя нов масив с по-голям размер и данните се копират там.
Резервираният капацитет (capacity) позволява ефективно управление на паметта, като намалява броя на алокациите при растеж на среза.
Пример:
s := make([]int, 3, 5) // дължина=3, капацитет=5
s = append(s, 4) // дължина=4, капацитет=5
s = append(s, 5) // дължина=5, капацитет=5
s = append(s, 6) // дължина=6, капацитет=10 (се заделя нова памет)
По този начин, размерите и резервираните капацитети на срезовете се съхраняват в структурата на среза и се управляват автоматично по време на изпълнение.