1.4Kпросмотров
19.2%от подписчиков
19 марта 2026 г.
Score: 1.6K
❓ Почему interface{} или any замедляют программу Любой интерфейс в Go — это два указателя. Пустой интерфейс (eface) хранит указатель на метаданные типа и указатель на данные. Непустой (iface) — указатель на itab (таблицу с информацией о типе и методах) и указатель на данные. Само по себе это не проблема. Проблемы возникают из-за последствий такого устройства. Когда вы передаёте конкретное значение в интерфейс, компилятор запускает escape analysis — анализ, может ли значение убежать за пределы текущего стекового фрейма. Если да, значение копируется в кучу, а указатель смотрит на эту копию. Простые типы: int, bool, указатели; компилятор нередко передаёт без аллокации. Но структуры и значения, которые реально убегают, аллоцируются. Это означает нагрузку на GC. Вызов метода через интерфейс это косвенный вызов через itab.fun[]. Компилятор не знает во время компиляции, какая именно функция будет вызвана, поэтому: • Компилятор не может подставить тело функции на месте вызова • Процессор видит косвенный переход и не может надёжно его предсказать • Перед вызовом нужно прочитать адрес функции из itab Это не катастрофа при редких вызовах, но в циклах с миллионами итераций разница ощутима. 🐸 Библиотека Go для собеса
1.4K
просмотров
1234
символов
Нет
эмодзи
Нет
медиа

Другие посты @go_interview_lib

Все посты канала →
❓ Почему interface{} или any замедляют программу Любой интер — @go_interview_lib | PostSniper