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