Passando argumentos para funções com parâmetros constantes: é mais rápido?

Considere, por exemplo:

int sum(int a, int b)
{
    return a + b;
}

vs.

int sum(const int a, const int b)
{
    return a + b;
}

A segunda abordagem é geralmente mais rápida?

Os parâmetros de função em C são copiados e enviados para a função, para que as alterações dentro da função não afetem os valores originais. Meu raciocínio é que no segundosum acima, o compilador sabe com certeza quea eb não são modificados dentro da função, por isso pode apenas passar os valores originais sem copiá-los primeiro. É por isso que eu acho que o segundosum é mais rápido que o primeiro. Mas eu realmente não sei. No exemplo simples particular desum acima, as diferenças, se houver, devem ser mínimas.

Editar: osum exemplo é apenas para ilustrar o meu ponto. Eu não espero que neste exemplo em particular haja grandes diferenças. Mas eu me pergunto se em situações mais complicadasconst Um modificador dentro de um parâmetro de função pode ser explorado pelo compilador para tornar a função mais rápida. Eu duvido que o compilador sempre possa determinar se um parâmetro é alterado dentro de uma função (daí a minha segunda questão abaixo); daqui eu esperaria que quando encontra umconst modificador, faz algo diferente do que quando não háconst modificador.

Questão: Em geral, uma função será mais rápida quando seus argumentos foremconst, do que quando eles não são?

Questão 2: Em geral, um compilador C (teoricamente) pode sempre determinar se um parâmetro de função é alterado dentro da função?

questionAnswers(4)

yourAnswerToTheQuestion