Produziert ein besserer / neuerer C- oder C ++ - Compiler leistungsfähigeren kompilierten Code? Oder sind sie beim Compilieren nur schneller / besser?

394
shadowtalker

Ich bin selbst kein C- oder C ++ - Programmierer, aber ich verwende häufig Software, die kompiliert werden muss oder auf andere Weise von einem Compiler abhängt, wie einige R-Pakete.

Wird diese Software tatsächlich besser funktionieren, wenn ich einen neueren / besseren Compiler verwende? Zum Beispiel verwende ich momentan die Mac OS X-Systemversion von Clang, und es wurde vorgeschlagen, stattdessen eine neuere Version zu verwenden. Ist das nur ein Vorschlag, um mir beim Kompilieren Zeit und Speicher zu sparen? Oder produziert es tatsächlich effizientere kompilierte Software?

2
Für die Person, die als "gehört auf SO" schließt: Dies ist keine entwicklungsbezogene Frage; Dies ist aus Sicht des Benutzers eine Frage (Hinweis: Es gibt viele Betriebssysteme und Softwarepakete, von denen der Benutzer erwartet, dass sie aus dem Quellcode kompilieren). Es wäre Off-Topic bei SO und * ist * On-Topic bei SU; enge Gründe sind viel differenzierter als "er erwähnte das Kompilieren!". Bob vor 9 Jahren 1
@ Bob Danke Ihnen. Ich hatte das eigentlich auf StackOverflow geschrieben und beschloss, es stattdessen hier zu posten shadowtalker vor 9 Jahren 1
@ fixer1234 Ich habe speziell C und C ++ zu Titel und Tags hinzugefügt shadowtalker vor 9 Jahren 0
@ fixer1234 Sie lesen viel zu weit in die Frage. Wenn die Antwort "Es gibt keine gute Antwort" ist, dann soll es so sein shadowtalker vor 9 Jahren 0

1 Antwort auf die Frage

3
Ramhound

Wird diese Software tatsächlich besser funktionieren, wenn ich einen neueren / besseren Compiler verwende?

Dies hängt vollständig davon ab, ob in einem bestimmten Release die Funktion zur Codeoptimierung des Compilers bearbeitet wird.

Zum Beispiel verwende ich momentan die Mac OS X-Systemversion von Clang, und es wurde vorgeschlagen, stattdessen eine neuere Version zu verwenden.

Sie sollten bei der Compiler-Version bleiben, von der Sie wissen, dass sie funktioniert, sofern Sie keine Funktion benötigen, die nur in einer späteren Version vorhanden ist. Wenn Sie nicht wissen, dass eine spätere Version etwas wirksamer ist, sollten Sie kein Upgrade durchführen.

Ist das nur ein Vorschlag, um mir beim Kompilieren Zeit und Speicher zu sparen?

Der Vorschlag scheint ehrlich gesagt zu 100% opionionbasiert zu sein. Wenn Sie der Person vertrauen, die diesen Vorschlag gemacht hat, sollten Sie ihn annehmen.

Ich sollte darauf hinweisen, dass ein Compiler Software ist und neuere Versionen neue Fehler einführen können, die die Optimierung der Routine beeinträchtigen. Sie sollten ein Gleichgewicht finden, der beste Weg, dies zu tun, ist immer die stabile Release-Version.

Gute Antwort, aber es wäre nützlich zu erwähnen, dass es häufig eine schlechte Idee ist, ein Out-of-Band-Upgrade ohne triftigen Grund durchzuführen, Sie sollten jedoch auch Upgrades durchführen, die Teil der offiziellen Betriebssystemversion sind. Manchmal führen neuere Compiler-Releases sogar zu Regressionen (sie können einen * schlechteren * Job zur Optimierung von Code als eine ältere Version ausführen). Bob vor 9 Jahren 0
Was ich hier sehe, ist ein vorsichtiges "Nein". Oder "vielleicht, aber wahrscheinlich nicht genug, um etwas zu bedeuten und Sie könnten dabei etwas kaputt machen." Genau? shadowtalker vor 9 Jahren 0
@Ramhound: Entsprechend der Frage kompiliert das OP. fixer1234 vor 9 Jahren 0
@Ramhound hast du es rückwärts. Normalerweise kompiliere ich nicht meinen eigenen Code (R ist eine interpretierte Sprache; ich benutze auch Python), aber ich muss gelegentlich Add-On-Pakete aus Source erstellen, die kompiliert werden müssen, bevor ich sie verwenden kann. Ich benutze auch ein Programm namens Stan, für das ich C ++ - Code kompilieren muss, allerdings automatisch generierten C ++ - Code. shadowtalker vor 9 Jahren 0
@ Ramhound: Ich habe Probleme mit der Frage, aber deine Antwort ist gut. +1 fixer1234 vor 9 Jahren 0