Справочник Пользователя для AMD 250

Скачать
Страница из 384
Chapter 2
C and C++ Source-Level Optimizations
25
Software Optimization Guide for AMD64 Processors
25112
Rev. 3.06
September 2005
2.10
SWITCH and Noncontiguous Case Expressions
Optimization
Use 
if-else
 statements in place of 
switch
 statements that have noncontiguous case expressions. 
(Case expressions are the individual expressions to which the single 
switch
 expression is compared.)
Application
This optimization applies to:
32-bit software
64-bit software
Rationale
If the case expressions are contiguous or nearly contiguous integer values, most compilers translate 
the 
switch
 statement as a jump table instead of a comparison chain. Jump tables generally improve 
performance because:
They reduce the number of branches to a single procedure call.
The size of the control-flow code is the same no matter how many cases there are.
The amount of control-flow code that the processor must execute is the same for all values of the 
switch
 expression.
However, if the case expressions are noncontiguous values, most compilers translate the 
switch
 
statement as a comparison chain. Comparison chains are undesirable because:
They use dense sequences of conditional branches, which interfere with the processor’s ability to 
successfully perform branch prediction.
The size of the control-flow code increases with the number of cases.
The amount of control-flow code that the processor must execute varies with the value of the 
switch
 expression.