25.01.2011, 20:56
|
|
Modus ponens
модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
|
опкоды тут ни при чем. Рассмотрим такую ситуацию:
getscope 0
в функции с единажды определенной цепочкой областей видимости:
JIT компилятор сможет вместо колбека в VM записать обращение к участку памяти (потому что оно константа, и компилятор может ее вычислить).
в анонимной функции:
JIT "не знает" что вернется в любом случае, а только в конкретном вызове, т.е. ему для каждого конкретного вызова нужно будет перекомпилировать, либо просто оставить это как колбек куда-то в уже скомпилированый код VM.
Мое предположение заключается в том, что JIT достаточно умный для того, чтобы сделать первую оптимизацию.
Я не знаю как хранятся локальные переменные в C#, но разница должна быть вполне серьезной потому что в AS3 они не хранятся вообще (а шарповый рефлектор как-то может даже имена иногда восстановить). В AS3 они превращаются в последовательность процедур и записей в регистры. Как таковых переменных не существует. Т.е. мы "запоминаем", что переменную #1 мы положили в регистр #1, когда надо будет ее использовать, мы прочитаем значение в регистре #1.
__________________
Hell is the possibility of sanity
|