История изменений
Исправление SZT, (текущая версия) :
Тут есть и обратная сторона медали. Программист может свои if-ы не от балды расставлять, а в таком порядке, в котором ему кажется что будет оптимальней. Например первый if (a==1) return 22;
из примера может стоять первым по причине того, что по мнению программиста это первое условие с большей вероятностью может сработать, т.е значение переменной a
, передаваемое в функцию, в 99% случаев будет равнятся именно единице, а не чему-то другому, и такая самодеятельность компилятора, когда он этот код переводит в какие-то непонятные деревья, может все испортить.
Другой интересный пример http://goo.gl/2p8MfN - компилятор clang тут делает очень глупую вещь - два раза cmp вместо очевидного решения:
cmpl $100, %edi
jg a1
jne a2
jmp a3
Исходная версия SZT, :
Тут есть и обратная сторона медали. Программист может свои if-ы не от балды расставлять, а в таком порядке, в котором ему кажется что будет оптимальней. Например первый if (a==1) return 22;
из примера может стоять первым по причине того, что по мнению программиста это первое условие с большей вероятностью может сработать, т.е значение переменной a
, передаваемое в функцию, в 99% случаев будет равнятся именно единице, а не чему-то другому, и такая самодеятельность компилятора, когда он этот код переводит в какие-то непонятные деревья, может все испортить.
Другой интересный пример http://goo.gl/2p8MfN - компилятор clang тут делает очень глупую вещь - два раза cmp вместо очевидного решения:
cmpl $100, %edi
jg a1
jne a2
jmp a3