Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Evaluation Stack in .NET programs |
Посл.ответ | Сообщение |
|
Создано: 16 октября 2006 10:55 · Личное сообщение · #1 Всем привет! Кто-нибудь может обьяснить по-русски, что такое Evaluation Stack в .NET программах? Как он работает? Почему Common Language Runtime называют stack machine? Почему Крис Касперски говорит о нем, что он(stack) на самом деле не существует? Где он (stack) находиться физически? Что можно почитать по этому вопросу? Заранее большое Спасибо! ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 17 октября 2006 13:38 · Личное сообщение · #2 > Почему Common Language Runtime называют stack machine? Видимо следует загуглить что-нибудь осмысленное, и понять что виртуальные машины бывают стэковыми и регистровыми. Тогда, возможно, станет понятно ограничение регистровых машин - сколько бы у нее ни было виртуальных регистров, они могут кончиться на сложных выражениях типа a = (b+c)*d + (e^f)/g - ..., тогда как стэковая машина будет складывать промежуточные результаты в "стэк", хотя это конечно не тот стэк к которому все привыкли =) |
|
Создано: 17 октября 2006 17:04 · Поправил: Nimnul · Личное сообщение · #3 DrGolova пишет: Видимо следует загуглить что-нибудь осмысленное, и понять что виртуальные машины бывают стэковыми и регистровыми. Видимо следует понять что в .NET нет никаких виртуальных машин. plutos Стек в рантайме обычный как у обычных программ, то что нет нормальных дебугеров которые его показывают, не значит что его нет, а в илкоде стек имеет весьма абстрактное представление. ♪ ----- have a nice day |
|
Создано: 18 октября 2006 06:01 · Личное сообщение · #4 |
|
Создано: 18 октября 2006 18:57 · Поправил: Nimnul · Личное сообщение · #5 |
|
Создано: 19 октября 2006 04:23 · Поправил: AlexZ · Личное сообщение · #6 plutos пишет: Почему Common Language Runtime называют stack machine? Почему Крис Касперски говорит о нем, что он(stack) на самом деле не существует? Где он (stack) находиться физически? DrGolova пишет: тогда как стэковая машина будет складывать промежуточные результаты в "стэк", хотя это конечно не тот стэк к которому все привыкли =) Наверное речь идет о стэке вида: [499] <-stack pointer [......] [003] [002] [001] Если надо выполнить (a+b)*d^3 то в стэк складывается a, b, затем выполняется сложение, затем в стэк идёт d и ещё раз d, выполняется умножение, затем ещё раз d, затем умножение с лежащим в стэке результате (a+b). То есть выполняется операция над двумя верхними ячейками стэка, результат складывается во вторую, и указатель стэка уменьшается на 1. ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 19 октября 2006 08:16 · Личное сообщение · #7 Это:
в отладочной версии выглядит так:
----- have a nice day |
eXeL@B —› Программирование —› Evaluation Stack in .NET programs |