Хотя фактическая реализация зависит от платформы, эта идея является причиной потенциально опасных переполнений буфера. Например,
-------------
| arr[0] | \
------------- \
| arr[1] | -> arr[3] is local to a function
------------- /
| arr[2] | /
-------------
| frame ptr |
-------------
| ret val |
-------------
| ret addr |
-------------
| args |
-------------
Мой вопрос: есть ли причина, по которой локальный массив из-за отсутствия лучшего глагола стекает вниз? Вместо этого, если массив должен был заполниться, разве он не уменьшит количество ошибок переполнения буфера, которые перезаписывают адрес возврата?
Конечно, используя потоки, можно перезаписать адрес возврата функции, которую вызвала текущая функция. Но давайте пока проигнорируем это.