.exe bei C++ größer ?
-
Ich weiß die Frage ist evtl. etwas allgemein, aber kann es sein das ein c++ Programm im Vergleich zum (fast) identischen c Programm / Code mehr speicher benötigt ?
Also ich habe ein älteres C Programm auf C++ umgesetzt. Ja, es hat jetzt paar Klassen und so, aber das C programm brauchte als exe ca. 400kb und die C++ Version 1,4 MB ....
Also beim Compiler ist auch kein Debug eingestellt oder so.
Kommt mir jetzt etwas komisch vor.
-
Ja, ist üblicherweise so.
-
Es ist eine etwas groessere runtime.
Allerdings nimmt der Speicher nicht proportional zu und bei richtigen Projekten sind die Binaries haeufig das kleinste daran.
-
Jop, die runtime (also das was printf/cout etc. implementiert) ist deutlich groesser bei C++.
-
Dazu kommt ggf. noch haufenweise Tabellen für virtuelle Funktionen, RTTI und Exceptionhandling.
-
Ok, danke, dann bin ich ja beruhigt
-
Es ist auch in C++ möglich, das abzustellen, wenn du wirklich willst.
-
Wie meinst du das jetzt ? Die Optimierungstufe hochdrehen ?
-
Nathan schrieb:
Dazu kommt ggf. noch haufenweise Tabellen für virtuelle Funktionen, RTTI und Exceptionhandling.
Ich glaub dass Templateverwendung mehr reinhaut
mem schrieb:
Wie meinst du das jetzt ? Die Optimierungstufe hochdrehen ?
Ich glaube es war eher gemeint Exceptionhandling und RTTI abzudrehen. Gibt C++ Compiler wo das geht.
Und natürlich keine Klassen mit virtuellen Funktionen schreiben.
-
Nathan schrieb:
Dazu kommt ggf. noch haufenweise Tabellen für virtuelle Funktionen, RTTI und Exceptionhandling.
Tabellen für virtuelle Funktionen hat man nur wenn man virtuelle Funktionen nutzt. Die nutzt man nur, wenn man das braucht. In C müsste man sich da auch Code für einfallen lassen um etwas vergleichbares zu realisieren.
Bei Exeptions sieht es etwas anders aus. Das kann das Executable schon mal gut 20% größer machen nur dadurch das Exections eingeschaltet sind. Abhilfe bietet seit C++11 noexept.
-
Auch mit C++ kann man extrem kleine *.exe erzeugen, aber nicht mit den Default-Einstellungen. Eine Minimalexe ist dann so im Dreh von 2kb.
-
Es kommt auch entscheidend auf die verwendete Implementierung der Standardbibliothek an. Gerade die Libstdc++ hat einen großen Platzbedarf, wenn man sie statisch linkt. Es gibt auch sehr auf Größe optimierte Implementierungen insbesondere für embedded Geräte.
-
Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) 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.
-
TNA schrieb:
Es kommt auch entscheidend auf die verwendete Implementierung der Standardbibliothek an. Gerade die Libstdc++ hat einen großen Platzbedarf, wenn man sie statisch linkt. Es gibt auch sehr auf Größe optimierte Implementierungen insbesondere für embedded Geräte.
Natuerlich, aber fuer eine richtig kleine exe laesst man die ja ehh weg.