Optymalizacje, takie jak stała propagacja, są możliwe dla różnych funkcji w obrębie tej samej jednostki kompilacji (tj. Ten sam plik).Czy kompilatory C/C++ optymalizują się w różnych jednostkach kompilacji?
Na przykład:
int f(int x)
{
return 3 + x;
}
int main(void)
{
printf("%d\n", 1 + f(4));
return 0;
}
W tym przykładzie, że wystarczająco inteligentna kompilator może propagować „4” stałe do funkcji „f”, rozwiązanie arytmetyki całkowitą o drugiej stałej „3 "i propaguje wartość wyniku, a następnie składa wszystko do wartości końcowej" 8 ".
(Dobrze, poprawcie mnie jeśli się mylę ..)
Jednak to, co się dzieje, jeśli funkcja „F” jest w innej jednostce kompilacji. Ponieważ obie jednostki są kompilowane osobno, kompilator nie może optymalizować w ten sposób.
Czy to oznacza, że optymalizacje są możliwe tylko w tej samej jednostce kompilacji, czy też są jakieś opóźnienia w optymalizacji pod kątem czasu połączenia?
Pytanie boczne: Czy skrypt, który tworzy jeden duży plik .c ze wszystkich drzew źródłowych, zwiększa możliwości optymalizacji? –
Tak, umieszczenie całego kodu w jednym pliku nazywa się amalgamacją - http://www.sqlite.org/amalgamation.html - i służy do tego właśnie celu. – sharptooth
tylko wtedy, gdy kod je obsługuje. preprocesor definiuje, statyczne definicje jednostek tłumaczeniowych, limity kompilatorów i inne rzeczy stają na przeszkodzie. OTOH, może również znacznie przyspieszyć budowę. – peterchen