Typecast используют условно внутри? (C #, C / C ++)

Этот вопрос наиболее специфичен для C #, но было бы интересно узнать и о C / C ++. Я полагаю, что Java должен использовать условные выражения, учитывая его динамическое приведение типов / отсутствие обобщений во время компиляции.

Лучше всего избегать разветвлений там, где можно использовать логику без разветвлений из соображений производительности. Так что было бы интересно узнать, для потенциального избегания в критических разделах.

0

Решение

Этот вопрос наиболее характерен для C #

Нет, это не так. Вся тема намеренно исключена из спецификации как C #, так и CIL. Спецификациям нечего сказать по этому вопросу.

Вы спрашиваете о деталях реализации компилятора точно в срок.

Теперь, когда это уже прояснено, я могу добавить, что я много лет читал технические статьи Microsoft о том, как анализировать CIL, чтобы найти как простые, так и сложные случаи, которые позволили бы оптимизировать приведение. Тем не менее, Microsoft не вдаваться в подробности, когда они говорят о фактической реализации их джиттер.

Поэтому лучшее, что вы можете сделать, — это написать какой-нибудь тест таким образом, чтобы оптимизатор скомпилировал его, и посмотреть на машинный код, сгенерированный, когда не используется отладчик.

0

Другие решения

При понижении рейтинга ответ, безусловно, да, поскольку он требует перехода по дереву с множественным выбором на каждом уровне.

При апскейдинге это зависит от того, как выполняется итерация для перехода по дереву типов. В большинстве случаев ответом, вероятно, будет «да», но некоторые оптимизации дерева (в частности, его расположение в памяти) могут привести к тому, что обход будет операцией без ответвлений.

0

По вопросам рекламы [email protected]