Re[2]: Отключение проверки выхода за границы массива
От: Sharov Россия  
Дата: 05.01.21 19:13
Оценка:
Здравствуйте, rameel, Вы писали:

R>Здравствуйте, VladCore, Вы писали:


VC>>Кто помнит, в обоих ли случаях JIT отключает проверку на выход за границы массива, или только в первом?

VC>>arr — массив одномерный в обоих случаях

R>Зависит от рантайма. Для последних (Core и NET FW 4.8 x64) разницы никакой нет, будет сгенерирован один и тот же код — проверки на выход за границы будут устранены. Для NET FW 4.8 x86 во втором варианте оптимизация уже не работает, соответственно проверки устранены уже не будут.


А почему будет такая разница в сгенерированно коде?

R>Все это справедливо только, если работаешь с локальной переменной или аргументом метода. В этом случае, джит уверен, что никто не изменит ссылку из вне метода, в остальном случае — гарантий нет, и джит вставит проверки на выход за границы массива


А как jit убедиться, что никто не изменит аргумент в вызывающем коде? Всяческая многопоточность и т.д.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.