Я знаю, что в архитектурах, с которыми я лично знаком (x86, 6502 и т.д.), стек обычно растет вниз (т.е. каждый элемент, помещенный в стек, приводит к уменьшению SP, а не к увеличению).
Мне интересно историческое обоснование этого. Я знаю, что в унифицированном адресном пространстве удобно начинать стек на противоположном конце сегмента данных (скажем), поэтому проблема возникает только в том случае, если две стороны сталкиваются посередине. Но почему стек традиционно получает верхнюю часть? Особенно с учетом того, насколько это противоположность «концептуальной» модели?
(И обратите внимание, что в архитектуре 6502 стек также растет вниз, даже если он ограничен одной 256-байтовой страницей, и этот выбор направления кажется произвольным.)