Здравствуйте, rameel, Вы писали:
R>Здравствуйте, VladCore, Вы писали:
VC>>Кто помнит, в обоих ли случаях JIT отключает проверку на выход за границы массива, или только в первом? VC>>arr — массив одномерный в обоих случаях
R>Зависит от рантайма. Для последних (Core и NET FW 4.8 x64) разницы никакой нет, будет сгенерирован один и тот же код — проверки на выход за границы будут устранены. Для NET FW 4.8 x86 во втором варианте оптимизация уже не работает, соответственно проверки устранены уже не будут.
А почему будет такая разница в сгенерированно коде?
R>Все это справедливо только, если работаешь с локальной переменной или аргументом метода. В этом случае, джит уверен, что никто не изменит ссылку из вне метода, в остальном случае — гарантий нет, и джит вставит проверки на выход за границы массива
А как jit убедиться, что никто не изменит аргумент в вызывающем коде? Всяческая многопоточность и т.д.