Sobes.tech
Junior — Middle

Czy ilość dostępnej pamięci lub pojemność zmienia się przy zmniejszaniu rozmiaru wycinka w języku programowania?

sobes.tech AI

Odpowiedź od AI

W języku Go, zakres (slice) to struktura zawierająca wskaźnik na tablicę, długość i pojemność.

Zmniejszając długość zakresu (np. za pomocą slice = slice[:newLength]), zmienia się tylko długość — ilość elementów dostępnych do odczytu i zapisu. Pojemność i przydzielona pamięć pozostają bez zmian, ponieważ zakres nadal odwołuje się do tej samej tablicy.

Jeśli chcesz zmniejszyć pojemność i zwolnić pamięć, musisz utworzyć nowy zakres i skopiować do niego potrzebne elementy, na przykład:

oldSlice := []int{1, 2, 3, 4, 5}
newSlice := make([]int, 3)
copy(newSlice, oldSlice[:3])

W ten sposób zmniejszenie długości zakresu nie zmienia pojemności i przydzielonej pamięci, więc pamięć nie jest automatycznie zwalniana.