2016-05-15 15 views
-3

Ich war lange Zeit ein All-Time [visual] Basic-Programmierer. Kürzlich habe ich eine nette Android-App gefunden, die C++ lehrt und ich habe sie heruntergeladen, und ich lerne diese Sprache jetzt seit ein paar Wochen.Warum Konsolen-Anwendungen [way] größer sind als GUI-basierte Programme (Windows-Formulare)

Allerdings bemerkte ich etwas deutlich anders in meinen EXE-Dateien. Die C++ - Programme, die von Code :: Blocks generiert werden, sind jeweils etwa 1 MB groß, aber die meisten meiner mit Visual Basic 6.0 und 2010 generierten Programme erreichen kaum 100 KB.

Eine Sache zu beachten ist, dass alle meine wenigen C++ - Programme Konsolenanwendungen sind, und alle meine BASIC-Programme sind GUI-basierte Anwendungen. Also meine Frage ist: ist diese Größe Lücke aufgrund der Art der Anwendung, oder es hat damit zu tun, wie C++ und BASIC-Programme kompiliert werden?

+2

VB.NET wird in wahnsinnig kompakten Bytecode kompiliert, wobei die .NET-Umgebung aus dem System geladen wird, auf dem die Assembly ausgeführt wird. Support-Bibliotheken werden nicht in die Assembly kompiliert. Die C++ - Anwendung wird wahrscheinlich in allen ihren Support-Bibliotheken statisch verlinkt. Sie vergleichen hier Äpfel mit Orangen. – IInspectable

+0

Lass uns sagen, dass du ein einfaches "Hallo Welt" -Programm machen wirst. Die App EXE der Konsole wird etwa 1 MB wiegen, die Windows Form App wird etwa 1 KB wiegen. Nichts Besonderes, Standard-Compiler. – David

+0

Sie sollten versuchen, Ihr C++ - Programm mit Optimierungen zu kompilieren (im Freigabemodus). Ohne Debug-Informationen und mit Space-Optimierungen sind ausführbare Dateien viel kleiner. – Drop

Antwort

0

Die wahrscheinlichste Antwort ist, dass Ihr Konsolenprogramm wahrscheinlich statisch mit seinen abhängigen Bibliotheken verbunden ist, was bedeutet, dass es Maschinencode von externen Bibliotheken in die ausführbare Datei Ihrer Anwendung kopiert. Während die GUI-Anwendung wahrscheinlich zu Shared Libraries verlinkt, lädt der abhängige Maschinencode zur Laufzeit in den Speicher. Sie können die Abhängigkeiten der gemeinsam genutzten Bibliotheken Ihrer Anwendung überprüfen, um sie zu überprüfen.

+0

Yeah, nur das überprüft und die Liste für die NET-App ist etwa 120 die Konsole App ist nur 10. Ich bin nicht gewohnt, Abhängigkeiten zu überprüfen. – David

+0

Los geht's! Sie könnten die Konsolenanwendung mit gemeinsamen Bibliotheken verknüpfen, und sie sollte viel kleiner sein. – kcraigie