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.