Назад к вопросам
OZON
Junior — Middle
145
При передаче данных в функцию: что более эффективно с точки зрения использования памяти — массив или срез?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Go массивы имеют фиксированный размер и хранятся полностью в памяти, тогда как срезы (slices) — это структура, которая содержит указатель на массив, длину и ёмкость.
С точки зрения использования памяти:
- Массив — занимает память ровно под все элементы, размер известен на этапе компиляции.
- Срез — сам по себе занимает немного памяти (три слова: указатель, длина, ёмкость), но указывает на массив, который хранит данные.
При передаче в функцию:
- Если передать массив, он копируется целиком, что может быть дорого по памяти и времени при больших размерах.
- Если передать срез, копируется только структура среза (указатель + длина + ёмкость), а данные остаются в исходном массиве, то есть копирования данных не происходит.
Поэтому передача среза более эффективна с точки зрения использования памяти и производительности, особенно для больших наборов данных.
Пример:
func processArray(arr [1000]int) {
// копируется весь массив
}
func processSlice(s []int) {
// копируется только структура среза
}
func main() {
var a [1000]int
processArray(a) // дорого
processSlice(a[:]) // эффективно
}