Ксения (19.05.2005 22:14, просмотров: 2041)
Почему CSTACK растет вниз? Не знаю как у остальных компиляторов, но IAR AVR C организует CSTACK явно по-дурацки. Какими соображениями руководствовались создатели компилятора, когда выбирали развертку CSTACKа сверху-вниз?
На счет RSTACKа всё в порядке. Это аппаратный стек, и у абсолютного большинства процессоров он растет со старших адресов памяти. Здесь компилятор лишь отражает данность аппаратной реализации вызовов подпрограмм.
Что же касается CSTACKа, но он "самодельный" в том смысле, что реализован чисто программно. И почему при реализации компилятора его расположили так, а не иначе, не могу найти объяснений.
На мой взгляд было бы несравненно лучше, если бы оба стека росли друг другу НАВСТРЕЧУ. Почему? Да потому, что даже если и случился бы такой казус, что один из стеков переполнится и заступит на чужую территорию, то при встречном развертывании место заступа с большой степенью вероятности может оказаться свободным, а значит и не привести к непоправимым последствиям. Ведь не обязательно же максимальное заполнение обоих стеков происходит в один и тот же момент? А вот развертка CSTACKа в том же направлении, что и RSTACKа, приводит к тому, что заступ любого из них однозначно приведет к непоправимым разрушениям.