Define für Optimierungsstufe?

#1593192
Lesenswert?

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
}
#1593442
Lesenswert?

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.
Gast #1593472
Lesenswert?

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.
Gast #1593673
Lesenswert?

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ß.
Gast #1593758
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren