Ich möchte den Microsoft Visual Studio-Compiler cl.exe
ausführen, ohne den Präprozessor aufzurufen. Ist das möglich? Ich dachte, dass das Vorkompilieren von vorverarbeitetem Quellcode (mit dem /c
-Flag) dazu führen würde, dass der Präprozessor läuft, ein No-Op ist, aber anscheinend ist das nicht der Fall. Ich habe ein bisschen Benchmarking gemacht. Hier ist eine kleine Quelldatei ( main.cpp
), die nur etwas Code enthält:
Hier sind einige verschiedene Aufrufe von Compilern und deren Timings:
%Vor%Es scheint, dass das Kompilieren von vorverarbeitetem Quellcode bereits ein bisschen schneller ist (der Präprozessor muss nichts tun). Der Unterschied zwischen 1 und 2 legt jedoch nahe, dass der eigentliche Compiler und Assembler nur etwas mehr als 0.5s benötigt. Das Kompilieren des vorverarbeiteten Quellcodes (wie in Schritt 3) ist also etwas langsamer als ich gehofft hatte.
Gibt es eine Möglichkeit, den Compiler und Assembler einfach auszuführen, ohne den Präprozessor aufzurufen? Ich bin an Lösungen für MSVC6 bis MSVC10 interessiert.
Nach meinem Wissen gibt es keine Möglichkeit, den Compiler ohne den Präprozessor auszuführen (ungeachtet der Tatsache, dass er nichts tut.
)Die Trennung der zwei Stufen ist jedoch offensichtlich langsamer, wenn Sie eine Datei in die Datei schreiben und dann diese Datei erneut lesen. Wenn es diese Schreibvorgänge nicht benötigt, kann es es im Speicher halten und Sie sparen eine Menge Zeit, bis die Platte auf & amp; lesen von.
ie Auch wenn Sie den Vorprozessor deaktivieren könnten, wäre es immer noch langsamer als das gleichzeitige Ausführen beider Stufen.
Es kann durchaus sein, dass die meiste Zeit, die Sie für den Präprozessor halten, tatsächlich die Zeit ist, die Sie damit verbracht haben, diese große Datei auf die Festplatte zu schreiben. Der Präprozessor sollte tatsächlich einen winzigen Prozentsatz der Zeit benötigen, die der Rest des Compilers braucht. Ein großer Vorteil einer normalen Vor- / Kompilierung ist, dass der Compiler mit dem Kompilieren beginnen kann, während die Präprozessorstufe noch läuft, vielleicht in einem separaten Thread oder wenn er eine neue Präprozessorausgabe erkennt. Die große Präprozessor-Ausgabe muss möglicherweise nie Speicher (geschweige denn Festplatte) belegen, da sie in kleineren Blöcken verbraucht und überschrieben wird.
Tags und Links c++ visual-c++ c-preprocessor