Ответ действительно зависит от используемой вами ОС и арки. Если отображается , вы используете вариант * nix, и, скорее всего, это означает, что Linux.
Для Linux до того, как рандомизация стала стандартной, по умолчанию не хватало места начала ядра. В моей системе x86 для стека используется регион (с отключенным ASLR): bffea000 - c0000000
ПРИМЕЧАНИЕ: предоставленное мною значение не обязательно является точным для всех систем, но это то же самое, что и для моей системы.
В современных системах Linux стек будет по довольно случайному адресу. Вы можете убедиться в этом, выполнив это несколько раз подряд:
cat /proc/self/maps | grep "\[stack\]"
Если опция отключена, я ожидаю, что все программы по умолчанию будут находиться в одном и том же месте (конец пользовательского пространства).
Запуск программы с exec
заменяет ваше адресное пространство новой программой; это будет включать в себя стек, поэтому он окажется в том же месте, что и любая другая программа. Подумайте об этом: ваша оболочка должна сделать fork/exec
, чтобы запустить программу так же, как ваша программа ...