C++ Programm: mit -O3 ohne Probs. ohne Segfault

Post Reply
Message
Author
Peter

C++ Programm: mit -O3 ohne Probs. ohne Segfault

#1 Post by Peter »

Hallo,

ich habe ein C++ Programm, dass bei unterschiedlichen Optimierungsstufen beim kompilieren unterschiedliche ausgaben liefert !
es besteht aus 2 Quelltextdateien, kompiliere ich mit:
g++ mki.cpp board.cpp
so erhalte ich nach ./a.out einen Segmentationfault.
kompiliere ich dagegen mit:
g++ -O3 mki.cpp board.cpp
so läuft a.out korrekt durch.

Ich habe dieses Verhalten auf zwei Rechnern getestet.
Rechner 1:
g++ -v
gcc version 2.95.3 20010315 (SuSE)

Rechner 2:
g++ -v
gcc version 2.95.2 19991024 (release)

Ist dies ein Bug im gcc ?? Sollte ich das irgendwo melden (wo?) ?

das
Posts: 78
Joined: 22. Jan 2001 1:37
Location: 42369 Wuppertal

Re: C++ Programm: mit -O3 ohne Probs. ohne Segfaul

#2 Post by das »

Hmmm, normalerweise ist es eher umgekehrt, also daß Programme ohne Optimierungen problemlos laufen, aber mit Optimierungen u.U. Schwierigkeiten machen. Ich glaube aber kaum, daß gcc ohne Optimierungen einen Kompilier-Fehler macht, der mit -O3 nicht auftritt - wahrscheinlich liegt der Fehler eher in deinem eigenen Code.

Hast du mal versucht das Programm im Debugger auszuführen, um rauszufinden wo das Segfault auftritt?

Peter

C++ Programm: mit -O3 ohne Probs. ohne Segfaul

#3 Post by Peter »

Nein,
ich habe das noch nicht mit ddd angeschaut, ich habe einfach immer die O3 Optimierung genommen, da es damit funktioniert. Also glaubst du das es in Ordnung ist, dass Unterschiedliche Ausgaben zustande kommen ? Kein Bug ?

das
Posts: 78
Joined: 22. Jan 2001 1:37
Location: 42369 Wuppertal

Re: C++ Programm: mit -O3 ohne Probs. ohne Segfaul

#4 Post by das »

Ein Bug ist es sicher. Es ist weder normal noch in Ordnung wenn du mit -O3 andere Ergebnisse hast als ohne.

Die Frage ist nur, ob gcc den Fehler verursacht oder dein eigener Code. Ich würde mal auf deinen Code tippen...
Es wäre denkbar daß gcc den Code deines Programms unterschiedlich im Speicher anordnet, je nachdem ob du mit oder ohne Optimierungen kompilierst. Das könnte dann dazu führen daß Fehler wie beispielsweise Überschreitungen von Array-Grenzen das Programm nur manchmal zum Absturz bringen - eben je nachdem ob du Optimierungen verwendest oder nicht.
Versuch also einfach mal mit Hilfe eines Debuggers rauszukriegen wo das Programm abstürzt...

Ein Bug in gcc ist natürlich auch nicht ausgeschlossen, halte ich aber für extrem unwahrscheinlich.


Dominic

Peter

C++ Programm: mit -O3 ohne Probs. ohne Segfault

#5 Post by Peter »

Ich habe den Fehler gefunden, war sehr simpel, ich habe einfach einen Array verkleinert, aber vergessen die Schleife, die den Array "nullt" anzupassen. Mit O3 hat er wohl erkannt, dass ich die sowieso nicht zulässigen Zuweisungen im Programm nicht brauche. Also wurde die Schleife automatisch angepasst <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

das
Posts: 78
Joined: 22. Jan 2001 1:37
Location: 42369 Wuppertal

Re: C++ Programm: mit -O3 ohne Probs. ohne Segfaul

#6 Post by das »

Ich glaube nicht, daß gcc die Schleife automatisch angepasst hat, so schlau ist der auch wieder nicht...
Ich denke eher, daß sich einfach zufällig mit -O3 nichts wichtiges hinter der Array im Speicher befand, so daß die Zuweisungen keinen Schaden angerichten haben. Ohne -O3 waren dann die Daten anders angeordnet, die Schleife hat irgendwas überschrieben was nicht überschrieben werden durfte, und bang, segfault...


Dominic

Wolfgang

Re: C++ Programm: mit -O3 ohne Probs

#7 Post by Wolfgang »

Hi!

Schau einfach mal den ausgegebenen Assembler-Code an (Option -S von gcc). Darin kann man sehen, ob er das wirklich wegoptimiert.

Cheers,
Wolfgang

Post Reply