Это связано с вопросом "Почему стеки обычно растут вниз?" , но больше с точки зрения безопасности. Я вообще ссылаюсь на x86.
Мне кажется странным, что стек будет расти вниз, когда буферы обычно записываются вверх в память. Например, типичная строка С++ имеет свой конец с более высоким адресом памяти, чем начало.
Это означает, что если есть переполнение буфера, вы переписываете дальше стек вызовов, который, как я понимаю, является угрозой безопасности, поскольку он открывает возможность изменения адресов возврата и содержимого локальной переменной.
Если стек вырос вверх в памяти, не будет ли переполнение буфера просто запущено в мертвую память? Это улучшит безопасность? Если да, то почему это не было сделано? Как насчет x64, эти стеки растут вверх, а если нет, то почему?