Как намекнуть оптимизатору компилятора Visual C ++, что конкретная ветвь оператора if вряд ли будет выполнена?

У нас есть макрос для проверки ошибок, который выглядит следующим образом:

#define CheckCondition( x ) \
    if( x ) { \
    //okay, do nothing \
    } else { \
       CallFunctionThatThrowsException(); \
    }

и обычно условие должно быть истинным , и мы бы хотели, чтобы прогнозирование ветвления ЦП всегда выберите этот путь, и если он окажется false , мы не будем На самом деле забота о неверном предсказании - выброс исключения и массовая раскрутка стека в любом случае будут стоить целое состояние.

Согласно описаниям CPU, при предсказании ветвления переходы вперед и назад будут обрабатываться несколько иначе (что-то вроде обратного перехода всегда выполняется переход вперед никогда не выполняется), и компилятор может улучшить предсказание ветвлений, сгенерировав код, который будет давать правильные подсказки для предсказателя ветвления ЦП.

gcc, похоже, имеет вероятные и маловероятные подсказки для этого. Есть ли что-нибудь подобное в Visual C ++? Можно ли для этого использовать __ accept ключевое слово ?

18
задан Community 23 May 2017 в 10:32
поделиться