патамушта calling conventions и работа с "железным" стеком. Предполагается, что адресное пространство стека непрерывно, а для этого с достаточной очевидностью его надо как-то отделить от кучи, дабы туда не лазил динамический аллокатор.
gcc умеет делать разрозненный динамически увеличивающийся стек (-fstack-split), но для использования сего все, с чем линкуется собираемая софтина, должно быть собрано так же. В llvm тоже вроде такое запилили.
Ну и "большие компы" - понятие растяжимое) зависит от реализации языка. В яве, например, сегменты стека выделяются таки динамически при надобности, но максимальный общий их размер таки задается при старте - так же для отделения от кучи, чтобы сегменты стека не трогал сборщик мусора.



