Avatar ·

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

Hallo zusammen! Ich bin neu in C++ und versuche, die Optimierungsflags von GCC zu verstehen. Ich habe ein kleines Programm zur Bildverarbeitung: Ich wende einen Gauß-Filter auf eine Pixelmatrix (Größe 4096x4096) an. Ich kompiliere es mit verschiedenen Flags und messe die Ausführungszeit. Erwartungsgemäß bringt -O2 einen Leistungszuwachs gegenüber -O0. Aber ich habe eine seltsame Sache bemerkt: 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) { float sum = 0.0f; for (int ky = -2; ky <= 2; ++ky) { for (int kx = -2; kx <= 2; ++kx) { int ix = std::clamp(x + kx, 0, width - 1);