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