Я знаю, что эта ветка действительно старая, но у меня есть мысль о втором вопросе:
На мой взгляд, стек растет, хотя адреса памяти уменьшаются. Если бы вы написали целую кучу цифр на листе бумаги, вы бы начали с левого верхнего угла, с 0. Затем вы увеличивали бы числа слева направо, затем сверху вниз. Скажем, стек выглядит так:
000 001 002 003 004 000 001 002 003 004 000 001 002 003 004
005 006 007 008 009 005 006 007 008 009 005 <b>006 007 008 009</b>
010 011 012 013 014 010 011 012 013 014 <b>010 011 012 013 014</b>
015 016 017 018 019 015 016 <b>017 018 019 015 016 017 018 019</b>
020 021 022 <b>023 024 020 021 022 023 024 020 021 022 023 024
025 026 027 028 029 025 026 027 028 029 025 026 027 028 029</b>
где полужирные числа представляют память стека, а полужирные числа представляют адреса памяти, которые стек не использует. Каждый блок с одинаковыми номерами представляет собой этап программы, где стек вызовов вырос.
Несмотря на то, что адреса памяти перемещаются вниз, стек растет вверх.
Аналогично, с подпружиненным стеком пластин,
если бы вы сняли тарелку с вершины стека, вы бы назвали это первой тарелкой (наименьшим числом), верно? Даже думал, что это наивысший. Программист может даже назвать это нулевой табличкой.