У нас есть макрос для проверки ошибок, который выглядит следующим образом:
#define CheckCondition( x ) \
if( x ) { \
//okay, do nothing \
} else { \
CallFunctionThatThrowsException(); \
}
и обычно условие должно быть истинным
, и мы бы хотели, чтобы прогнозирование ветвления ЦП всегда выберите этот путь, и если он окажется false
, мы не будем На самом деле забота о неверном предсказании - выброс исключения и массовая раскрутка стека в любом случае будут стоить целое состояние.
Согласно описаниям CPU, при предсказании ветвления переходы вперед и назад будут обрабатываться несколько иначе (что-то вроде обратного перехода всегда выполняется переход вперед никогда не выполняется), и компилятор может улучшить предсказание ветвлений, сгенерировав код, который будет давать правильные подсказки для предсказателя ветвления ЦП.
gcc, похоже, имеет вероятные
и маловероятные
подсказки для этого. Есть ли что-нибудь подобное в Visual C ++? Можно ли для этого использовать __ accept
ключевое слово ?