Информация об изменениях

Сообщение Re: Вопрос про стек CLI от 02.05.2015 21:09

Изменено 17.05.2015 15:58 VladD2

Здравствуйте, Cynic, Вы писали:

Щас буду гнать чушь, ибо даже не знаю, что такое Virtual Execution System, но тем ни менее чисто из здравого смысла
C>Изучая CLI возникло пару вопросов о который раньше как-то не задумывался.
C>

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

    C>
  • Как организован стек? Что область памяти понятно, но нафига например указывать директиву .maxstack в начале тела метода, если в стеке всё равно могут хранится значения разных типов и размер его, просто зная количество элементов в стеке, не посчитаешь?
    C>
Ну так компилятор же знает не только кол-во переменных, но и их тип, а значит вполне может вычислить сколько памяти под них нужно выделить.
Re: Вопрос про стек CLI
Здравствуйте, Cynic, Вы писали:

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

C>* Как организован стек? Что область памяти понятно, но нафига например указывать директиву .maxstack в начале тела метода, если в стеке всё равно могут хранится значения разных типов и размер его, просто зная количество элементов в стеке, не посчитаешь?


Ну так компилятор же знает не только кол-во переменных, но и их тип, а значит вполне может вычислить сколько памяти под них нужно выделить.