Массив с точки зрения программистов, фиксирован по месту и размеру, вы знаете, где вы находитесь и где все это находится. У вас есть доступ ко всему этому.
Со стеком вы сидите на одном его конце, но понятия не имеете о его размере или о том, как далеко вы можете безопасно пройти. Ваш доступ к нему ограничен суммой, которую вы выделили, вы часто даже не знаете, выделяете ли вы нужную сумму, если вы просто врезались в кучу или пространство программы. Ваше представление о стеке - это небольшой массив, который вы сами выделили, размер которого вы хотели, вы можете контролировать и видеть. Ваша часть ничем не отличается от массива. Разница заключается в том, что ваш массив привязан к одному концу другого массива ради аргумента и терминологии, которую вы не можете увидеть, не знаете, насколько она велика или мала, и вы не можете прикоснуться к ней, не нанеся вреда. Массив, если он не глобальный, часто так или иначе реализуется в стеке, поэтому массив и стек совместно используют одно и то же пространство на протяжении всей функции.
Если вы хотите перейти к аппаратной части, то это, конечно, зависит от процессора, но обычно массив основан на известной начальной точке / адресе, размер известен компилятору / программисту, и адреса вычисляются в нем, иногда используется адресация смещения регистра (загрузка значения с адреса, определенного этим базовым значением регистра плюс это значение регистра смещения, также при компиляции это может быть непосредственное смещение, необязательно основанное на регистре, зависит, конечно, от процессора), которое в сборке очень сильно напоминает доступ к массиву в коде высокого уровня. Аналогично со стеком, если он доступен, вы можете использовать регистр или немедленную адресацию смещения, часто хотя он использует специальный регистр, либо сам указатель стека, либо регистр, зарезервированный компилятором / программистом, который будет использоваться для доступа к кадру стека для этого функция. А для некоторых процессоров используются специальные функции доступа к стеку, и / или они необходимы для доступа к стеку. У вас есть инструкции push и pop, но они используются не так часто, как вы думаете, и на самом деле не применимы к этому вопросу. Для некоторых процессоров push и pop являются псевдонимами для инструкций, которые можно использовать с любым регистром, где угодно, а не только с указателем стека в стеке, что еще больше убирает связь push и pop с этим вопросом.