Куча и стек

Стек и куча это области оперативной (изменяемой) памяти.

Кстати есть еще память типа static.

Память на стеке это локальные переменные в функции. Входим в функцию локальные переменные создаются в стеке, выходим из функции переменные исчезают. Причем их не надо удалять, просто следующий вход в следующую функцию затирает ранее присвоенные данные ячейкам памяти в стеке и все.

И это главный плюс памяти на стеке, в том что не надо беспокоится об ее освобождении. Компилятор на этапе компиляции и сборки сам создает и уничтожает локальные переменные

В отличии от памяти на стеке память в куче (new Cpp) (malloc,C) надо обязательно подчищать за собой своим кодом (delete Cpp , free C). 

И как часто бывает это не всегда происходит. Отсюда и происходят утечки памяти.

фотка 1

Память на стеке и в куче объединяет то, что это по сути одна область памяти с тем нюансом, что начало стека и кучи  начинаются на противоположных краях памяти и растут навстречу друг другу.

Есть еще  другие области памяти, но они так сказать  фиксированные

1.память команд (не изменяемая) 

2. изменяемая фиксированная память, она же инициализированная и не инициализированная память, она же глобальная память и там же как часть статическая память.