Стек и куча - это два различных механизма управления памятью в программировании.
На картинке выше показано как работает стек и куча. В стек в данном случае первой поместили переменную x1 следом x2 и так далее до х5 получать же эти переменные можно только в обратном порядке, в то время как в куче мы можем обратиться к любой переменной не зависимо от того какой по счету она была туда помещена. Далее подробно
Стек
Стек представляет собой структуру данных, в которой элементы добавляются и удаляются только с одного конца, называемого вершиной стека. Элемент, добавленный последним, будет удален первым (принцип LIFO - Last In First Out(последний зашел первый вышел)). Примером использования стека может служить функция вызовов, где каждый вызов функции добавляется в стек, а когда функция заканчивает работу, она удаляется из стека. Это позволяет управлять последовательностью вызовов функций и возвращения из них.
В этом примере создается стек типа int с помощью класса std::stack, добавляются три элемента и выводятся на экран в обратном порядке.
Куча
Куча, с другой стороны, представляет собой область памяти, в которой выделяются блоки памяти во время выполнения программы. В отличие от стека, выделение и освобождение памяти в куче происходит в произвольном порядке. Куча используется, когда требуется выделить память для переменных или объектов, которые будут использоваться на протяжении всей программы или в течение длительного времени.
В этом примере выделяется память под одно целочисленное значение с помощью оператора new, значение присваивается переменной и затем выводится на экран. Затем память освобождается с помощью оператора delete.
Таким образом, основное отличие между стеком и кучей заключается в том, как они управляют памятью в программировании. Стек используется для управления временными данными, которые должны быть обработаны в определенном порядке, в то время как куча используется для хранения данных, которые должны быть доступны в течение всей программы.