Ответ
Плюсы:
- Динамическое выделение памяти — можно выделять и освобождать память в runtime.
- Гибкость — размер памяти не ограничен статически, как в стеке.
- Доступен всем потокам приложения (глобальная область памяти).
Минусы:
- Медленнее стека — выделение/освобождение памяти требует больше ресурсов.
- Риск утечек памяти — если не освобождать выделенную память (например, забыть
free()в C или не обнулять ссылки в Java/Kotlin). - Фрагментация — частые аллокации/деаллокации могут привести к фрагментации кучи.
// Пример утечки в Android (неправильно)
class LeakyActivity : Activity() {
private val leak = SomeSingleton.getInstance(this) // Context удерживается
}