Übergeben von Argumenten an Funktionen mit const-Parametern: Geht das schneller?
Betrachten Sie zum Beispiel:
int sum(int a, int b)
{
return a + b;
}
gegen
int sum(const int a, const int b)
{
return a + b;
}
Ist der zweite Ansatz im Allgemeinen schneller?
Funktionsparameter in C werden kopiert und an die Funktion gesendet, sodass Änderungen innerhalb der Funktion die ursprünglichen Werte nicht beeinflussen. Meine Argumentation ist die in der zweitensum
oben weiß der Compiler sicher, dassa
undb
werden in der Funktion nicht geändert, sodass nur die ursprünglichen Werte übergeben werden können, ohne sie zuvor zu kopieren. Deshalb denke ich die zweitesum
ist schneller als der erste. Aber ich weiß es nicht wirklich. In dem besonders einfachen Beispiel vonsum
oben sollten die Unterschiede, falls vorhanden, minimal sein.
Bearbeiten: Dassum
Beispiel ist nur, um meinen Punkt zu veranschaulichen. Ich erwarte nicht, dass es in diesem Beispiel große Unterschiede geben sollte. Aber ich frage mich, ob in komplizierteren Situationen dieconst
Modifikator innerhalb eines Funktionsparameters kann vom Compiler ausgenutzt werden, um die Funktion zu beschleunigen. Ich bezweifle, dass der Compiler immer feststellen kann, ob ein Parameter innerhalb einer Funktion geändert wird (daher meine zweite Frage unten). daher würde ich das erwarten, wenn es eine findetconst
Modifikator, es macht etwas anderes als wenn es keine gibtconst
Modifikator.
Frage: Im Allgemeinen ist eine Funktion schneller, wenn ihre Argumente vorliegenconst
, als wenn sie nicht sind?
Frage 2: Kann ein C-Compiler (theoretisch) im Allgemeinen immer feststellen, ob ein Funktionsparameter innerhalb der Funktion geändert wird?