2017-12-16 3 views
0

Ich habe ein sehr einfaches Programm mit dev C++ v5.11 (in c-Sprache) erstellt, und ich wollte mir den kompilierten Code in HxD ansehen, um zu sehen, wie er mit dem ursprünglichen Code verglichen wird. Das Problem besteht darin, dass etwa 95% der kompilierten Informationen wie Junk-Informationen aussehen, und es scheint einen 9-zeiligen Code zu haben und ihn auf eine 127 kb-Datei mit vielen Leerzeichen, Strings zur Fehlerbehandlung und einem Abschnitt mit vielen ausgedehnt zu haben Typdeklarationen im String-Format. Meine Frage ist, warum ist das eine Sache, und welches andere Programm könnte ich verwenden, um den Code nur so lange zu kompilieren, wie er sein muss?Was ist mit all den Junk-Informationen in meiner EXE-Datei?

Originalcode:

#include <stdio.h> 
int main() { 
    int count = 0; 
    start: 
     count = count + 1; 
     printf("count is %d\n", &count); 
     goto start; 
    return 0; 
} 

Compiled-Code ist zu groß in den Körper gebracht zu werden

+0

Der Code enthält Debuginformationen? –

+0

Sie haben eine riesige Header-Datei, die oben auf Ihrem Code sitzt. – Rohcana

+0

gibt es eine Möglichkeit, die Größe der Kopfzeile zu reduzieren, wie nur printf? –

Antwort

2

Jede vollständige Antwort wird zu Ihrem Compiler spezifisch sein, und die Art und Weise, in der Sie Ihr Programm erstellt haben, und das Host-System. Ich werde mich auf die generischen Bedenken konzentrieren.

Das Kompilieren mit Debugging-Informationen und ohne Optimierung (oft die Standardeinstellungen eines Compilers) führt zu vielen zusätzlichen Informationen in Ihrer ausführbaren Datei. Und es gibt auch Verknüpfungsoptionen, z. B. verwandte statische oder dynamische Verknüpfungen, die steuern, wie viele Informationen aus einer Bibliothek in die ausführbare Datei kopiert werden (mit Kompromissen in ausführbarer Größe, Abhängigkeit von Bibliotheken zur Laufzeit usw.)).

Möglicherweise gibt es auf Ihrem System auch Dienstprogramme (z. B. Strip unter Unix), um nicht benötigte Informationen aus einer ausführbaren Datei zu entfernen.

1

Sie können diesen Artikel interessant finden, die die kleinstmögliche Größe der ausführbaren Datei für eine ausführbare Linux zu bekommen versucht: http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html

ich die Mehrheit Ihrer ausführbaren vorstellen wird, schließen mit Code aus dem stdio.h aufgenommen.

Sie könnten auch daran interessiert sein, den Assembly-Ausgang zu betrachten, anstatt ihn in HxD zu betrachten, den Sie mit dem Schalter/fa in Visual Studio erhalten. Sie finden diese Einstellung unter Projekt-> Eigenschaften-> Konfigurationseigenschaften-> C/C++ -> Ausgabedateien.