Hallo zusammen, gibt es eine Möglichkeit die eingestellte Optimierungsstufe auszugeben? Gruß Timo
Der GCC stellt dir
1 | #define __OPTIMIZE__ 1
|
2 | #define __OPTIMIZE_SIZE 1
|
zur Verfügung, wenn optimiert oder auf Größe optimiert wird. Davon sollte dein Programm aber i.d.R. nicht abhängig sein.
Bei mir werden die Definitionen leider nicht gefunden. Ich schreibe nur eine Testroutine und möchte auf meinem Terminal dann sehen ob die Optimierung an oder aus ist... Gruß
Die sind aber schon lange im gcc.
1 | klaus@a64a:~ > gcc -Wall tst.c && ./a.out |
2 | keine Optimierung |
3 | klaus@a64a:~ > gcc -Wall -Os tst.c && ./a.out |
4 | Optimierung nach Groesse |
5 | klaus@a64a:~ > gcc -Wall -O1 tst.c && ./a.out |
6 | Optimierung nach Geschwindigkeit |
7 | klaus@a64a:~ > gcc -Wall -O2 tst.c && ./a.out |
8 | Optimierung nach Geschwindigkeit |
9 | klaus@a64a:~ > gcc -Wall -O3 tst.c && ./a.out |
10 | Optimierung nach Geschwindigkeit |
11 | klaus@a64a:~ > cat tst.c |
12 | #include <stdlib.h> |
13 | #include <stddef.h> |
14 | #include <stdio.h> |
15 | #include <string.h> |
16 | |
17 | int main( int nargs, char **args ) |
18 | { |
19 | |
20 | #ifdef __OPTIMIZE_SIZE__ |
21 | printf( "Optimierung nach Groesse\n" ); |
22 | #elif defined __OPTIMIZE__ |
23 | printf( "Optimierung nach Geschwindigkeit\n" ); |
24 | #else |
25 | printf( "keine Optimierung\n" ); |
26 | #endif |
27 | |
28 | return 0; |
29 | } |
Ja genau so hab ich es eigentlich gemacht... Liegt vielleicht an der IDE (CrossWorks), der aber GCC v4.1.1 verwendet Gruß
Ja funktioniert nun... für die einzelnen stufen gibt es kein define oder?!
keine ahnung, ich habe noch nie davon gehört. Der Wert von _OPTIMIZE_ ist auch immer 1, egal ob man mit -O1, -O2 oder -O3 aufruft. Letztlich würde das auch nicht viel helfen, weil -O... ohnehin nur eine Zusammenfassung vieler kleiner Einstllungen ist, die man eigentlich auch abfragen können müsste, wenn man es ernst meint.
Vorallem, und da wiederhole ich mich gerne, sollte dein Programm unabhängig von der Optimierung funktionieren.
Es gibt aber eben manchmal Dinge, die nicht davon unabhängig sind, wie z.B. bei der avr-libc die delay-Funktionen, die nur mit eingeschalteter Optimierung korrekt funktionieren.
Rolf Magnus schrieb: > Es gibt aber eben manchmal Dinge, die nicht davon unabhängig sind, wie > z.B. bei der avr-libc die delay-Funktionen, die nur mit eingeschalteter > Optimierung korrekt funktionieren. Das hat aber nicht dich als Anwender zu interessieren, sondern die Bibliotheks- und Compilerbauer. Auch der inb()/outb()-Krams im Linux-Kernel funktioniert i.d.R. nur mit Optimierung. Und selbst die verlassen sich nur auf die Optimierung, weil sie wissen, was passiert. Bei einem anderen Compiler geht das schon in die Hose. Du als Anwender weißt ja noch nichtmal, welche Optimierungen durchgeführt werden. Allenfalls kannst du einen Algorithmus zweimal implementieren, einmal mit Tabellen bei OPTIMIZE und einmal als nackten Algorithmus bei OPTIMIZE_SIZE.
Sven P. schrieb: > Rolf Magnus schrieb: >> Es gibt aber eben manchmal Dinge, die nicht davon unabhängig sind, wie >> z.B. bei der avr-libc die delay-Funktionen, die nur mit eingeschalteter >> Optimierung korrekt funktionieren. > > Das hat aber nicht dich als Anwender zu interessieren, sondern die > Bibliotheks- und Compilerbauer. Es hat den zu interessieren, der etwas programmiert, das von der Optimierung abhängt. Wenn das eine Library-Funktion ist, dann eben der Programmierer der Library. > Auch der inb()/outb()-Krams im Linux-Kernel funktioniert i.d.R. nur mit > Optimierung. Und selbst die verlassen sich nur auf die Optimierung, > weil sie wissen, was passiert. Bei einem anderen Compiler geht das > schon in die Hose. Bei Mikrocontroller-Programmierung kommt es schon mal vor, daß man sich die Hände schmutzig machen muß.
Rolf Magnus schrieb: > Es hat den zu interessieren, der etwas programmiert, das von der > Optimierung abhängt. Wenn das eine Library-Funktion ist, dann eben der > Programmierer der Library. Ja, ich versteh schon, was du meinst. Die Frage ist halt: Wer, außer den Compiler- und (Standard-)Bibliotheksbauern, kann denn überhaupt etwas schreiben, was von einer Optimierung abhängt, von der überhaupt nicht weiß, was und wie und warum passiert? Ein normales Programm sollte in jedem Fall unabhängig von der Optimierung funktionieren. Eben, weil man ohne Kenntnisse der Compiler-Interna überhaupt nicht weiß, was denn überhaupt optimiert wird, und von was man überhaupt abhängig ist.
Du hast immerhin selbst eine sinnvolles Beispiel geliefert: Auswahl eines Algos, je nach -O.... Allerdings fällt es schwer, viel mehr sinnvolle Anwendungen zu konstruieren.
Naja, ich bezog mich auf den Wunsch, auch noch die Optimierungsstufe herauszufinden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.