стек и куча

Стек и куча два разных разных способа организации памяти.

И если тебе часто требуется переменная в конце стека, то оптимальнее тогда размещать переменные в куче, т.к. не надо постоянно дёргать указатель стека туда-сюда.
Ну и оперция push или pop выполняется быстрее чем считать переменную и занкрементить указатель (*i++).

Стек — это более быстрая память, но у неё есть недостаток, он работает по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»), то есть данные, которые попали в него позже, освободятся раньше.

Для кучи же вы можете в любой момент попросить любое количество свободной памяти (оператор new) и когда она вам будет не больше нужна, вы её вернёте системе (оператор delete). Для стека это невозможно. Размещение в нём данных происходит автоматически. Например, при вызове функции, все её аргументы помещаются в стек и локальные переменные тоже. Когда функция отработала, это всё из стека удаляется.

Кстати, помимо стека и кучи есть ещё сегмент, в котором живут статические переменные.

Литература: Страуструп

_____________________________________________
Источники(читать подробнее)=
http://forum.sources.ru/index.php?showto...
http://otvety.google.ru/otvety/thread?ti...
Ключевые слова и фразы(для поиска)=