Хорошо, немного по другому >одну группу ячеек памяти в один момент времени хочется использовать под что-то одно, а в другой момент времени под что-то другое
1-й вариант - malloc
2-й вариант - при вызове подпрограммы компилятор выделяет память для локальных переменных.
В обоих случаях память сначала выделяется, потом освобождается. Во втором случае автоматически, без глюков и проблем фрагментации. Вот и вся разница.