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