2009-07-02 7 views
4

Ich benutze 4.1.2. Hat jemand irgendwelche Ideen von den besten Orten in meinem Code zu sehen? Erfahrung mit gemeinsamen Ursachen? Es gibt einige hässliche Zeiger-Umwandlungen (dh, d = (double) (* (float *) p), wobei p Pointer-to-int ist), an dem ich gerade arbeite, aber noch kein Glück.
Für was es wert ist, gibt -O0 die richtige Antwort. Danke für jede Hilfe.GCC gibt verschiedene numerische Ergebnisse mit -O0 und -O2

+3

könnten Sie ein (nicht) funktionierendes Beispiel angeben? – Gyom

+0

Kompilieren Sie mit -Wall und -Wextra? –

+0

Tut mir leid, ich arbeite daran. Schwerfällig. –

Antwort

7

würde ich für strenge Aliasing Fragen prüfen, wie hier gezeigt: http://www.cellperformance.com/mike_acton/2006/06/understanding_strict_aliasing.html

Ohne genau zu wissen, was Ihr Code tut, mir die Erwähnung von „hässlich Zeiger wirft“ Probleme vermuten Aliasing machen.

Es wäre hilfreich für Sie und erleichtert es uns zu beantworten, wenn Sie einen Code zur Verfügung gestellt, der das Problem demonstrierte.

+0

Der Beitrag http://stackoverflow.com/questions/83962/do-i-have-a-gcc-optimization-bug-or-ac-code-problem zeigt ein ähnliches Problem – an0nym0usc0ward

+0

Kompilieren mit Wall (oben vorgeschlagen) tat es . Die schlechte Zeile ist * (p1 + dcb.ntrc_hdr + r * NTW + t) = * (int *) &ftmp; –

3

Danke allen, -fno-strict-aliasing (von mehreren vorgeschlagen) löste mein Problem. Danke für deine Hilfe.
Lektion gelernt: Kompilieren Sie immer mit Warnflags.

+1

Stapelüberlauf ist kein Forum. Antworten können aus vielen Gründen, wie zum Beispiel Abstimmungen und Änderungen, neu angeordnet werden und sollten daher nicht dazu verwendet werden, auf andere Antworten zu antworten. Bitte hinterlassen Sie Kommentare oder bearbeiten Sie stattdessen die Frage. Wenn Ihr Problem aufgrund einer Antwort gelöst wurde, markieren Sie es bitte als akzeptiert (klicken Sie auf das grüne Häkchen unter dem Abstimmungszähler). Vergessen Sie nicht, hilfreiche Antworten abzugeben! – ephemient

Verwandte Themen