WikiDer > GNU-Compiler-Sammlung
GNU-Compiler-Sammlung | ||||
| Entwickler | GNU-Projekt | |||
| Letzte Version | 10.1 (7. Mai 2020) | |||
| Wartungsversion | 9.2 / 8.3 / 7.4 / 6.5 / 5.5 (12. August 2019 / 22. Februar 2019 / 6. Dezember 2018 / 26. Oktober 2018 / 10. Oktober 2017) | |||
| Status | Aktiv | |||
| Betriebssystem | Multiplattform | |||
| Geschrieben in | C [1] | |||
| Kategorie | Compiler | |||
| Lizenz | GNU General Public License und GNU Lesser General Public License | |||
| Versionskontrolle | gcc.gnu.org | |||
| Webseite | (und) Projektseite | |||
| ||||
GCC, welches dafür steht GNUCompiler Sammlung ist eine Sammlung Compiler, die unter dem GPL wird verteilt von der Free Software Foundation. Ursprünglich stand die Abkürzung für das GNU C-Compiler, aber jetzt kann GCC auch anders Programmiersprachen als C an, wie C , fortran, Java und ada.
GCC ist ein wichtiges Werkzeug für gratis Software. Der ursprüngliche GCC wurde geschrieben von Richard Stallman im 1987. Jetzt wird GCC von einer Gruppe von Programmierern verwaltet, die auf der ganzen Welt verteilt sind. GCC ist portiert zu mehr Prozessoren und Betriebssysteme als jeder andere Compiler.
Struktur
GCC-Compiler bestehen aus a Frontend, ein mittleres Ende und ein Backend. Das Programm gcc ist selbst kein Compiler, sondern sorgt dafür, dass die richtigen Teile von GCC je nach Ausgangssprache das wird zusammengestellt.
Das Frontend ist sprachspezifisch: Jede Sprache, die von GCC kompiliert werden kann, hat ein eigenes Frontend. Zu den Aufgaben des Frontends gehören: analysieren des Quellcodes und führen sprachspezifische Prüfungen wie Typprüfung. Das Frontend erstellt a abstrakter Syntaxbaum (abstrakter Syntaxbaum, AST) des Quellcodes in a interne Vertretung (IR) das GENERISCH wird genannt.
Nach dem Frontend a GENERISCHDarstellung des Programms erstellt wurde, wird sie an das mittlere Ende übergeben. Alle GCC-Compiler verwenden dasselbe Middle-End und Backend: Diese beiden sind vollständig sprachunabhängig und arbeiten mit sprachunabhängigen IRs.
Das GENERISCHDie von einem Frontend erstellte Repräsentation wird an das Middle-End übergeben. Dies wandelt die GENERISCH AST zu einem anderen IR, GIMPLE erwähnt. GIMPLE ist eine Teilmenge von GENERISCH, erlegt jedoch einige Einschränkungen auf. Zum Beispiel Ausdrücke in GIMPLE nicht mehr als drei Operanden. Dieses GIMPLE dann wird optimiert.
Dann die optimierte GIMPLE-Darstellung umgewandelt in SSA (Statische Einzelzuweisung). Das Hauptmerkmal von SSA ist, dass jeder Variable ein Wert wird nur einmal zugewiesen. Variablen ändern daher nie ihren Wert. Bei der Konvertierung in SSA wird immer dann, wenn einer vorhandenen Variablen ein Wert zugewiesen wird, eine neue Variable eingeführt. Diese Eigenschaft macht SSA besonders geeignet für eine Reihe von Optimierungen.
Die optimierte SSA wird dann in RTL konvertiert (Übertragungssprache registrieren). RTL ist eine interne Darstellung bestehend aus Anweisungen für a virtuelle Maschine mit einer unendlichen Zahl registriert. Im Gegensatz zu den anderen IRs hängt die Darstellung einer Sendung bei RTL von der Prozessor für die es zusammengestellt wird. Dies macht einige prozessorspezifische Guckloch-Optimierungen möglich.
Da diese Optimierungen prozessorabhängig sind, findet diese Optimierungsphase im GCC-Backend statt: Das Backend erhält die RTL-Darstellung des vom Middle-End bereitgestellten Quellcodes. Nach der Optimierung verwendet das Backend diese RTL, um Monteur generieren.
An diesem Punkt hat GCC seine Arbeit erledigt und den generierten Assembler an einen Assembler übergeben, der selbst nicht Teil von GCC ist, um Maschinensprache produzieren. Um diese Maschinensprache zu einer ausführbaren Datei zu machen, muss sie zuerst durch die links.
Funktionen
- Unterstützte Prozessorarchitekturen: AArch64[2], ARM, i386, x86-64, IBMPOWER8[3], RS/6000[4], PowerPC[4], SPARC und andere[5]
- Code-Optimierung[6]
Externe Links
- (und) gcc.gnu.org Projektseite
- (und) redhat.com Von der Quelle zur Binärdatei: Das Innenleben von GCC, Red Hat Magazine, Dezember 2004
- (und) Versionsgeschichte bei GNU.org