Теоритически, размещение стека можно менять в процессе работы. Практически - очень трудно и неудобно (т.к. это надо делать в отсутствии прерываний и находясь вне подпрограмм, либо уитывая подпрограммы). Дело в том, что стек растёт сверху вниз, а глобальные (статические) переменные компилятор размещает снизу вверх. Поэтому память практически всегда используется рационально. Даже если вы не пользуетесь компилятором - что вам мешает размещать также ?