Erstellen Sie ein kurzes C-Programm, dessen Kompilierung mit gcc absurd lange dauert. Die Einträge werden bewertet, indem die Kompilierung zeitgesteuert und anschließend die Kompilierungszeit des Referenzprogramms abgezogen wird.
Regeln
- Beliebige C-Sprache oder gcc-Erweiterung
- gcc 4.2.1
code-challenge
c
charliehorse55
quelle
quelle
Antworten:
quelle
main(){char*z=j;}
ein gültiges c-Programm geändert werden./Zm
, wir werden dasSowohl Charlies Antwort als auch meine frühere Arbeit beschäftigen sich mit dem Prinzip, den Pre-Prozessor viel Code schreiben zu lassen , aber sie üben hauptsächlich den Pre-Prozessor selbst, den Lexer (gute Idee, da dieser Schritt traditionell langsam war) und den Parser aus. Meins versucht auch, die Optimierungs- und Codegenerierungsschritte durchzuführen, aber es gewinnt dort offensichtlich nicht viel.
Als ich darüber nachdachte, wie ein typischer c-Compiler funktioniert, stellte ich fest, dass wir dem Code für die Symboltabelle nichts zu tun hatten. Dieser Eintrag ist ein Versuch, dem abzuhelfen. Es soll an die grundlegende Objektorientierung in der c-Implementierung erinnern, macht aber nichts Interessantes: Verwendet die Präprozessor-Erweiterungstechnik, um eine Reihe von Objekten zu deklarieren und trivial (und fälschlicherweise) zu initialisieren. Objekt, das komplizierte Typen auf vielen Ebenen des Bereichs verwendet und sich gegenseitig bei verschiedenen Entfernungen abschattet. Es sollte der Symboltabelle eine echte Wirkung verleihen.
Die Kompilierungszeit auf meinem Computer beträgt
-O3
mehr als 4 Sekunden mit und mehr als 1 Sekunde ohne Optimierung.Offensichtlich besteht der nächste Schritt darin, die OO-Implementierung für eine BCD-Klasse abzuschließen und die Pi-Berechnungen damit erneut durchzuführen, damit beide Effekte hart zum Laufen kommen.
quelle
Hier ist ein Riff des Exponential-Präprozessor-Expansions-Themas, das etwas minimal Interessantes bewirkt: Berechnet zwei Näherungen an pi nach Serienmethoden und vergleicht sie sowohl mit dem Wert in
math.h
als auch mit der üblichen Beschwörung.Ungolfed.
Es wird davon ausgegangen, dass Sie andere Arrangements verwenden
gcc
undglibc
/ oder nicht verwenden. Dastime (1)
Kompilieren mit-03
1 auf meinem 2,4-GHz-Intel-Core-2-Duo-MacBook dauert ungefähr 1,0 bis 1,1 Sekunden Prozessorzeit (bewertet mit ) . Eine Standardkompilierung benötigt ca. 0,4 Sekunden Prozessorzeit.Leider kann ich gcc weder zum Auswerten
pow
nochtgamma
zur Compiler-Zeit bringen, was wirklich helfen würde.Wenn Sie es ausführen, ist die Ausgabe:
was zeigt, wie langsam die naive Reihe konvergiert.
1 Um eine möglichst konstante Faltung und Eliminierung von Unterausdrücken zu erzielen.
quelle