Щас буду гнать чушь, ибо даже не знаю, что такое Virtual Execution System, но тем ни менее чисто из здравого смысла C>Изучая CLI возникло пару вопросов о который раньше как-то не задумывался. C>* Я так понимаю, что это относится ко всем ассемблерам, но всё же: везде в книге пишут, что VES (Virtual Execution System) оперирует данными на стеке. Вопрос, почему используется именно стек?
А что, если не стек? Ну вот смотри, что такое программа? Это тупо вызов функции, которая вызывает другие функции, которые вызывают третьи функции и тд. Где хранить данные, которые требуютмся для работы функции ?? Тут 2 варианта, либо функция НЕ знает, сколько именно памяти треба для хранения данных, тогда только дин память. Либо функция знает, и тут — стек самая простая и очевидная структура,задали сколько памяти нужно для работы функции, сначале работы она выделилась, в конце функции — освободилась. Все просто.
C>* Как организован стек? Что область памяти понятно, но нафига например указывать директиву .maxstack в начале тела метода, если в стеке всё равно могут хранится значения разных типов и размер его, просто зная количество элементов в стеке, не посчитаешь?
Ну так компилятор же знает не только кол-во переменных, но и их тип, а значит вполне может вычислить сколько памяти под них нужно выделить.