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

Сообщение Re[41]: benchmark от 11.01.2017 21:55

Изменено 04.02.2017 0:30 pilgrim_

Re[41]: benchmark
Здравствуйте, alex_public, Вы писали:

_>Ты же наверняка знаешь, что во всех этих языках все методы являются виртуальными функциями (говоря языком C++). Что это значит с точки зрения оптимизации? Что компилятор (пусть он даже очень сильный и у него есть куча времени) физически не сможет сделать инлайнинг, потому что просто не знает какой конкретно код в реальности будет вызываться — это определяется только в рантайме.


Выделенное для C# неверно, виртуальность указывается либо явно как в C++, либо неявно при реализации интерфейса.


_>В то время как в C++ не только часто употребимы не виртуальные функции, но и для виртуальных компилятор гарантированно осуществляет инлайнинг, если они вызваны от обычной переменной (а не от указателя или ссылки).


Если под выделенным ты имел ввиду не инлайнинг, а прямой вызов функцуии, то .NEt JIT умеет такое делать.
Re[41]: benchmark
Здравствуйте, alex_public, Вы писали:

_>Ты же наверняка знаешь, что во всех этих языках все методы являются виртуальными функциями (говоря языком C++). Что это значит с точки зрения оптимизации? Что компилятор (пусть он даже очень сильный и у него есть куча времени) физически не сможет сделать инлайнинг, потому что просто не знает какой конкретно код в реальности будет вызываться — это определяется только в рантайме.


Выделенное для C# неверно, виртуальность указывается либо явно как в C++, либо неявно при реализации интерфейса.


_>В то время как в C++ не только часто употребимы не виртуальные функции, но и для виртуальных компилятор гарантированно осуществляет инлайнинг, если они вызваны от обычной переменной (а не от указателя или ссылки).


Если под выделенным ты имел ввиду не инлайнинг, а прямой вызов функцуии, то .NEt JIT умеет такое делать.
на данный момент .NEt jit такое делать не умеет: http://rsdn.org/forum/flame.comp/6687499.1
Автор: pilgrim_
Дата: 04.02.17