
Керування пам'яттю
Stack vs heap, escape analysis, garbage collector, профілювання пам'яті, pprof, витоки пам'яті
1Яка основна різниця між виділенням на stack і виділенням на heap у Go?
Яка основна різниця між виділенням на stack і виділенням на heap у Go?
Відповідь
Stack керується автоматично, і виділення на ньому надзвичайно швидкі (просте переміщення stack pointer). Змінні на stack автоматично звільняються, коли функція повертає значення. Heap потребує garbage collector для звільнення пам'яті, і виділення на ньому повільніші, оскільки залучають runtime Go. Змінні, що залишаються живими після функції або чий розмір невідомий під час компіляції, потрапляють на heap.
2Що таке escape analysis у Go?
Що таке escape analysis у Go?
Відповідь
Escape analysis — це статичний аналіз, який виконує компілятор Go, щоб визначити, чи може змінна залишитися на stack, чи має бути виділена на heap. Якщо компілятор виявляє, що змінна референсується поза функцією, де її створено (через повернений вказівник, збереження в глобальній змінній тощо), змінна «escape» і буде виділена на heap. Цей аналіз автоматично оптимізує виділення пам'яті.
3Як переглянути результати escape analysis під час компіляції?
Як переглянути результати escape analysis під час компіляції?
Відповідь
Прапорець -gcflags=-m дозволяє переглянути рішення escape analysis. Використання -m=2 або -m=3 дає більше деталей про те, чому змінна escape. Наприклад, 'go build -gcflags=-m=2' покаже повідомлення на кшталт 'moved to heap: x', що вказує на переміщення змінної на heap. Цей інструмент необхідний для оптимізації виділення пам'яті в критичному коді.
У якому випадку локальна змінна escape на heap?
Яка основна роль garbage collector у Go?
+21 питань зі співбесід
Інші теми співбесід Go
Основи Go
Структури даних Go
Інтерфейси Go
Обробка помилок
Основи goroutines
Channels
Go Modules
HTTP-сервер
HTTP-клієнт
Кодування JSON
Database/SQL
Пакет context
Testing
Патерни конкурентності
Примітиви синхронізації
Веб-фреймворки Go
Проєктування REST API
gRPC
Reflection
Оптимізація продуктивності
Generics
Go Design Patterns
Microservices
Безпека та автентифікація
Docker & Containerization
Kubernetes Basics
Просунутий Go
Розробка CLI
Опануй Go для наступної співбесіди
Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.
Почни безкоштовно