Ja wir sind Befürworter von Open Source. Aber schauen sie mal: Wir haben unsere Distribution mit dem kommerziellen Compiler von Intel kompiliert, statt dem Open Source Compiler. Der kommerzielle war einfach besser, aber sonst ist Open Source super ;)
Der GCC war noch nie ein guter Compiler und hat das auch nicht behauptet, für ihn war Plattformunabhängigkeit wichtiger. So what ? In Performance Fragen wirst du (fast) nie etwas finden was die Optimierungsqualität von kommerzieller Software erreicht.
> Der Distribution liegt eine 60-Tage-Demoversion des Compilers bei.
Und nach 60 Tagen habe ich keinen Compiler für meine Distribution mehr! D.h. ich kann dann kein Programm im Quellcode aus dem Internet runderladen und übersetzen!
>Und nach 60 Tagen habe ich keinen Compiler für meine Distribution mehr! D.h. ich kann dann kein Programm im Quellcode aus dem Internet runderladen und übersetzen!:(
Nach den 60 Tagen startet das Update-tool von REDFLAG Linux einen Link, der auf die Seite eines Intel Businesspartners in REDMOND verweist.
Da kannst Du dann den Microsoft C/C++ Compiler aus dem 'Visual Studio .NET 2003 Professional' Paket als Migrationsversion runterladen.Diese läuft dann mit einer von MS angepaßten Wine-version.
'Vorteile' des MS C/C++ : Bessere Möglichkeit der Compilierung von MS Windows basierten Quellcodes und automatische Umwandlung in C#
Direkte Integration von DRM-Funktionen in Linux(Unix-)programmen.
Nachteile: Leider Probleme beim Compilieren und somit Erzeugen von Linux(Unix-) programmen wie Elf-Binaries, welches aber durch den Umwandlungsassistenten des MS Studio 2003 Toolkits ausgeglichen werden kann.Dieser schlägt Dir dann geringfüge Änderungen am Quellcode vor, wodurch das Programm dann compiliert und leider durch diese Änderungen das Programm in Intellectual Property von MS übergeht.
Melde dich bei Intel an und du bekommst eine kostenlose Compilerversion, die du immer verwenden kannst. Intel schenkt dir sogar updates, die dir nix kosten. Habe ich auch.
Also es ist evtl. nicht ganz passend zur News von oben, aber ich habe da dennoch mal ein, zwei kurze Fragen die mir beim Thema compiles kommen.
Ich bau mir mein Gentoo ja immer selbst zusammen (Gentoo-Phase1) und da gebe ich ja bei bootstrapen und auch hinterher complierflags für den gcc an. Nun gibt es da ein optimierungsflag das man auf -O1 bis -O3 stellen kann und was den Code generell optimieren soll. Weiss hier jemand, was da genau passiert?
Ach noch etwas gibt es eine gute "deutsche" beschreibung aller gcc compilerflags?
das sind einfach kuerzel, fuer andere optimierungsflags. von gcc 3.4 weiss ich nicht viel, aber aber 3.0 bis 3.2 machten bei der code optimierung (nix hardwarespezifischen, ein compiler versucht den code des programmieres mit einfachen mitteln effizienter zu machen, das einfachste beispiel waere eine multiplikation mit 2 durch ein leftshift ersetzen....) speziell in den hoehern stufen oft muell (die schon bei 03 angeschalten waren). also ich wuerd von )3 die finger weglassen und (als gentoo user hast ja zeit ) die dokus waelzen, welche der 03 flags fuer dich in frage kommen. aber erwarte nicht so viel, gcc will und kann gar nicht der super-optimierte complier sein
Jo, AMD bringt ein bischen was ein, macht dadurch die eigenen Prozessoren interessanter und muss sich sonst nicht um den immensen Aufwand eines multi-Plattform-Compilers kümmern. So ist beiden Seiten geholfen.
Ist zT auch abhaengig von der Programmiersprache. Nur bei -O3 werden bei C++ (zB) die templates ge-inlined.
Daneben gibt es auch noch -O0 was explizit optimierungen verbietet.
Zusaetzlich zu -OX gibt es noch eine ganze reihe weiterer flags: http://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/i386-and-x86_002d64-Options.html #i386-and-x86_002d64-Options
um zB die schose auf ne bestimmte CPU zu optimieren.
Zu "Weiss hier jemand, was da genau passiert?":
Ich hab mich ein wenig mit Compilerbau beschaeftigt. Ich kann allerdings jetzt an deiner frage nicht genau erkennen was du wissen willst. Geht es dir um optimierungen wie sie in compilern stattfinden genau ablaufen? Oder willst du wissen was die gcc flags genau bewirken?
Letzteres steht hier (allerdings nicht auf deutsch): http://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/Optimize-Options.html #Optimize-Options
AC
PS: seit wann darf man hier keine links mehr vernuenftig posten?
Compiler: -Variablen, die nie verwendet werden, werden gekickt -Kurze Schleifen werden aufgelöst -Werte werden möglichst lange in Registern gehalten -Multiplikationen durch Shifts ersetzt -Nie erreichbare Codestellen gestrichen (z.B. alles nach einem while(1) )
Linker: -nicht referenzierte Funktionen werden gestrichen
*Klugscheiß* den code nach einer while(1)-schleife darf man auf keinen fall wegwerfen. stell dir nen thread vor, der in einer solchen schleife läuft (hört ne fifo ab oder so). am ende vom programm kommt das break und der restliche code wird abgearbeitet (fifos schließen, was weiß ich). */klugscheiß*
Ja, das ist ein edles Teil. Klein, sehr schnell, erzeugt sehr guten Code und ist portabel. OpenBSD haette ihn gern als Systemcompiler eingesetzt und den gcc dafuer rausgeworfen, doch die Lizenz, unter der er steht, ist fuer Theo nicht akzeptabel.
Ja wir sind Befürworter von Open Source. Aber schauen sie mal: Wir haben unsere Distribution mit dem kommerziellen Compiler von Intel kompiliert, statt dem Open Source Compiler. Der kommerzielle war einfach besser, aber sonst ist Open Source super ;)
Mike
Der GCC war noch nie ein guter Compiler und hat das auch nicht behauptet, für ihn war Plattformunabhängigkeit wichtiger. So what ? In Performance Fragen wirst du (fast) nie etwas finden was die Optimierungsqualität von kommerzieller Software erreicht.
Das was er schreibt stimmt schließlich...
Und nach 60 Tagen habe ich keinen Compiler für meine Distribution mehr!
D.h. ich kann dann kein Programm im Quellcode aus dem Internet runderladen und übersetzen!
D.h. ich kann dann kein Programm im Quellcode aus dem Internet runderladen und übersetzen!:(
Nach den 60 Tagen startet das Update-tool von REDFLAG Linux einen Link, der auf die Seite eines Intel Businesspartners in REDMOND verweist.
Da kannst Du dann den Microsoft C/C++ Compiler aus dem 'Visual Studio .NET 2003 Professional' Paket als Migrationsversion runterladen.Diese läuft dann mit einer von MS angepaßten Wine-version.
'Vorteile' des MS C/C++ :
Bessere Möglichkeit der Compilierung von MS Windows basierten Quellcodes und automatische Umwandlung in C#
Direkte Integration von DRM-Funktionen in Linux(Unix-)programmen.
Nachteile: Leider Probleme beim Compilieren und somit Erzeugen von Linux(Unix-)
programmen wie Elf-Binaries, welches aber durch den Umwandlungsassistenten des MS Studio 2003 Toolkits ausgeglichen werden kann.Dieser schlägt Dir dann geringfüge Änderungen am Quellcode vor, wodurch das Programm dann compiliert und leider durch diese Änderungen das Programm in Intellectual Property von MS übergeht.
War nur Spaß ... nicht zu ernst nehmen ...
eine kostenlose Compilerversion, die du
immer verwenden kannst. Intel schenkt dir
sogar updates, die dir nix kosten.
Habe ich auch.
Ich bau mir mein Gentoo ja immer selbst zusammen (Gentoo-Phase1) und da gebe ich ja bei bootstrapen und auch hinterher complierflags für den gcc an. Nun gibt es da ein optimierungsflag das man auf -O1 bis -O3 stellen kann und was den Code generell optimieren soll. Weiss hier jemand, was da genau passiert?
Ach noch etwas gibt es eine gute "deutsche" beschreibung aller gcc compilerflags?
GCC rules!!
cya Matthias - und Danke für Antworten
Lese Dir auf jeden Fall auch die Kommentare durch. Steht in diesem Fall viel Interessantes drin
gcc will es ... und koennen tut er es auch. warum nicht?
Die performance von das was aus dem Intel compiler ist meist gar nicht viel
besser.
Bei AMD ist es so, dass AMD sein know-how direkt in den gcc mit einfliessen
laesst. Da ist AMD (mal wieder) schlauer als Intel.
AC
Jo, AMD bringt ein bischen was ein, macht dadurch die eigenen Prozessoren interessanter und muss sich sonst nicht um den immensen Aufwand eines multi-Plattform-Compilers kümmern. So ist beiden Seiten geholfen.
C++ (zB) die templates ge-inlined.
Daneben gibt es auch noch -O0 was explizit optimierungen verbietet.
Zusaetzlich zu -OX gibt es noch eine ganze reihe weiterer flags:
http://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/i386-and-x86_002d64-Options.html
#i386-and-x86_002d64-Options
um zB die schose auf ne bestimmte CPU zu optimieren.
Zu
"Weiss hier jemand, was da genau passiert?":
Ich hab mich ein wenig mit Compilerbau beschaeftigt. Ich kann
allerdings jetzt an deiner frage nicht genau erkennen was du wissen
willst. Geht es dir um optimierungen wie sie in compilern stattfinden
genau ablaufen? Oder willst du wissen was die gcc flags genau bewirken?
Letzteres steht hier (allerdings nicht auf deutsch):
http://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/Optimize-Options.html
#Optimize-Options
AC
PS: seit wann darf man hier keine links mehr vernuenftig posten?
ich wollte eigentlich nur wissen was optimiert wird. So zeugs a la inline code und weiteres. weil optimierter code kann halt vieles sein.
cya
Matthias
Compiler:
-Variablen, die nie verwendet werden, werden gekickt
-Kurze Schleifen werden aufgelöst
-Werte werden möglichst lange in Registern gehalten
-Multiplikationen durch Shifts ersetzt
-Nie erreichbare Codestellen gestrichen (z.B. alles nach einem while(1) )
Linker:
-nicht referenzierte Funktionen werden gestrichen
Oft gibts ja sowas wie ein
if( DEBUG ) { ...
und davor irgendwo irgendein
static const int DEBUG = 0;
oder ein
#define DEBUG 0
und da moechte man natuerlich nicht, dass der Compiler
im release den debug code mit aufnimmt.
AC