Показать сообщение отдельно
Старый 25.01.2011, 20:56
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 69  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
опкоды тут ни при чем. Рассмотрим такую ситуацию:
getscope 0

в функции с единажды определенной цепочкой областей видимости:
JIT компилятор сможет вместо колбека в VM записать обращение к участку памяти (потому что оно константа, и компилятор может ее вычислить).

в анонимной функции:
JIT "не знает" что вернется в любом случае, а только в конкретном вызове, т.е. ему для каждого конкретного вызова нужно будет перекомпилировать, либо просто оставить это как колбек куда-то в уже скомпилированый код VM.

Мое предположение заключается в том, что JIT достаточно умный для того, чтобы сделать первую оптимизацию.

Я не знаю как хранятся локальные переменные в C#, но разница должна быть вполне серьезной потому что в AS3 они не хранятся вообще (а шарповый рефлектор как-то может даже имена иногда восстановить). В AS3 они превращаются в последовательность процедур и записей в регистры. Как таковых переменных не существует. Т.е. мы "запоминаем", что переменную #1 мы положили в регистр #1, когда надо будет ее использовать, мы прочитаем значение в регистре #1.
__________________
Hell is the possibility of sanity