Qual é mais rápido? Chamada de função ou Condicional se Instrução?

Considere também a previsão de ramificação antes de responder a esta pergunt

Tenho alguns cenários em que posso substituir uma instrução condicional por uma chamada para uma função com a ajuda do ponteiro da função. (você pode pensar em programação baseada em componentes sobre herança para um tipo de senario semelhante)

     class Shape
     {
        float Area()
        {
            if(type == SQUARE)
             {
                return length*length;
             }
            else if(type == RECTANGLE)
            {
             return length*breadth;
            }
        } 
     }

A mesma classe pode ser escrita assim.

       class Shape
     {
        void SetAreaFunction(void *funcptr)//this function is used to set the current AreaFunc
        {
             CurrentAreaFunc = funcptr ;//this holds the pointer to current area func
        }
        float SqauareArea();//this will return square area
        float RectangleArea();//this will return rectangle area 
        float Area()
        {
            currentAreaFunc();
        } 
     }

e você considera os casos acima, ambos obtêm os mesmos resultados. Mas, estou pensando na sobrecarga de desempenho. No segundo caso, evito ter problemas de previsão de ramificação com uma chamada de funçã

Agora, deixe-me saber qual é a melhor prática e o 'código melhor otimizado' neste tipo de senários. eu considero otimizar meu código!)

P.S: não me importo se alguém fornecer uma visão detalhada sobre 'quão ruim é a previsão de ramificação', mesmo no código de montage

Update: Após a criação de perfil (tipo semelhante de código acima),
Se a condição tiver êxito neste tipo de senario. Alguém pode dar uma razão para isso? O código de chamada funcional pode ser pré-buscado, pois não há código de ramificação, certo? Mas aqui está a outra maneira ... o código de ramificação vence! : O Perfil do Intel Mac Osx, otimização do GCC O3 / Os.

questionAnswers(3)

yourAnswerToTheQuestion