Avatar ·

Warum generiert GCC 15-20% schnelleren Code bei Optimierung auf Größe (-Os) statt auf Geschwindigkeit (-O2)?

Hallo zusammen! Ich bin neu in C++ und versuche, die GCC-Optimierungsflags zu verstehen. Ich habe ein kleines Programm zur Bildverarbeitung: Ich wende einen Gaußschen Filter auf eine Pixelmatrix (Größe 4096x4096) an. Ich kompiliere es mit verschiedenen Flags und messe die Ausführungszeit. Erwartungsgemäß bringt -O2 eine Verbesserung gegenüber -O0. Aber mir ist eine seltsame Sache aufgefallen: Mit dem Flag -Os (Optimierung auf Codegröße) läuft das Programm 15-20% schneller als mit -O2 (Optimierung auf Geschwindigkeit)! Hier ist der vereinfachte Code: ```cpp #include #include #include void gaussian_blur(const std::vector& src, std::vector& dst, int width, int height) { const float kernel[5] = {0.0545, 0.2442, 0.4026, 0.2442, 0.0545}; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { ```