welcher Compiler?



  • Da ist ein "reiner" C++ Compiler, sowie ein .NET-Teil dabei, genau verstehe ich es auch nicht, aber für reine C++-Projekte funktioniert es bei mir prima...



  • VC++ 2002 und 2003 hatten nur als Produktnamen das ".NET"! Man kann mit VC++ 100% nativen C++ Code schreiben OHNE .NET-Framework. Durch die Verwirrung hat Microsoft auch mittlerweile das .NET aus dem Produktnamen raus genommen. VC++ 2005 heißt jetzt nicht mehr .NET.

    VC++ 2005 Express Edition ist auch kostenlos und optimiert sehr gut.
    http://www.microsoft.com/germany/msdn/vstudio/products/express/visualc/default.mspx



  • habs nochma mit dem VC++ compiliert
    44kb, spricht ja nich grad für gnu oder gibts da irgendwas das ich über g++ oder den den VC++ compiler wissen sollte bevor ich das hier einfach so in raum stell?



  • Compilier mit dem GNU mal probeweise mit -s -O2 und ohne -g ...



  • Bin nicht sicher, aber verhält sich der auf windows portierte gcc nicht
    anders als der auf nem *nix system normal vorhandene ?
    Ich weiss ja nicht welche objekte mit reingelinkt werden und wie er portiert wurde,denn da haben wir andere Experten hier;
    Aber bei mir auf meinem gentoo ist nen Hello World als Source 71 Byte und das
    ensprechende Binary 3kb groß.
    Aber naja der Vergelich wäre ja windows und Linux gemischt und da kommen bestimmt ne Menge Faktoren mit rein.
    Was ich sagen wollte ist nur, dass man imho dem gcc hier nichts vorwerfen kann.



  • aus meiner 106byte großen cpp datei ist eine 466 große .exe datei geworden

    466 was? byte? kleiner wird's nicht gehen 😉
    mit vc kannst du gegen msvcrt.lib linken, die die funktionen aus der entsprechenden dll in /system32 bezieht - wird also im gegensatz zum gnu-pendant vom betriebssystem mitgeliefert.



  • Der Compiler ist nicht das Problem sondern die Runtime LIB und die clib. Der ganze Initialisierungscode der Runtime LIB ist meist riesig, vor allem weil der hauffenweise Funktionen aus der clib mit reinzieht. MSVC6/7/7.1/8, GNU, ... können alle schön kleine Programme erzeugen, bloss der Initialisierungscode dazu ist quasi ein fixer Brocken den man nicht los wird. .NET Programme sind auch bloss deswegen so klein weil die nur nen mini Stub haben der die .NET Runtime lädt und die VM lostritt - jedes .NET Programm braucht aber Tonnenweise Zeugs aus der .NET Runtime und dem Framework. Gleiches gilt für den MSVC wenn du die DLL-Runtime verwendest, die Programme werden auch recht "schmal", brauchen aber die MSVC Runtime DLLs -- wobei die für den MSVC6 beim Windows ab Windows 95 oder so dabei sind. Von daher kein Problem -- die muss man nicht mit auszuliefern. Tut eigentlich niemand.

    Wenn du wirklich unbedingt C++ Programme schreiben willst die klein sind, dann musst du ohne Runtime und clib auskommen. Das heisst du hast *nixe*, kein printf, kein atoi, kein garnix -- von C++ Sachen wie std::cout oder ähnlichem ganz zu schweigen. Das heisst auf Deutsch: Plattform unabhängig kannst du dann schmeissen, weil du die native Windows/*NIX/... Funktionen für Sachen wie IO, Speicher Anfordern etc. verwenden MUSST.

    Und dann ist da noch das Problem WIE man das macht - also ein Programm ohne Startup-Code, ohne Runtime und ohne clib. Beim MSVC ist das z.B. ein gewaltiges Problem, da dort diverse Features wie RTTI, Exception Handling, new/delete etc. alle die Runtime DLL/LIB brauchen - weil sie dort implementiert sind und auch Funktionen aus der clib verwenden und... du siehst wo das hinführt.

    ergo: wenn du kleine Programme haben willst schreib in Assembler oder ggf. noch C-ohne-plus-plus.

    Ich frage mich bloss warum 500k so schlimm sind *grübel*...



  • Interessanter Artikel zu dem Thema:
    http://msdn.microsoft.com/msdnmag/issues/01/01/hood/
    Wobei ich,in Zeiten von 300 GB Festplatten, das Gefeilsche um 5KB auch nicht so ganz nachvollziehen kann.

    Gruß Spacelord



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Toba schrieb:

    nunja, anschließend hab ich das ganze mal durch den compiler geschoben und war zutieft erschrocken, aus meiner 106byte großen cpp datei ist eine 466 große .exe datei geworden die ich ohne die passende cygwin dll nicht einmal starten kann.
    desshalb die frage ob mir jemand helfen kann:

    Dann installier dir den MinGW. Das ist eine Portierung des GCCs (wovon der g++ ein Betandteil ist) für Windows. Daher brauchst du auch keine Cygwin.dll oder ähnliches.

    Ein kleineres Binary solltest du mittels der Optionen -Os -s erhalten. Aber im Grunde sind die Binaries wirklich groß bei C++, da unter Windows die Standard C++ Library komplett eingebunden wird. Das ist natürlich ein gewisser Fixer-Overhead, der nicht mehr wächst, wenn du größere Programme erstellst.


Anmelden zum Antworten