Article View: de.comp.lang.c++
Article #136Re: Hello World - warum so gross?
From: Christian Stieber
Date: Mon, 14 Aug 1995 15:24
Date: Mon, 14 Aug 1995 15:24
59 lines
3003 bytes
3003 bytes
Joerg Pleumann (sa021pl@unidui.uni-duisburg.de) wrote:
> 1) Das uebliche Hello-World in C mit stdio.h war bei Weglassen aller
> Symbolinformationen immer noch satte 24 KB groΓ‘. Ein bisschen happig
> fuer die simple Ausgabe eines konstanten Textstrings.
> 2) Das entsprechende Programm in C++ mit iostream.h liess sich nicht auf
> weniger als 64 KB bringen.
> 3) Ein Mini-Programm mit einer eigenen Klasse mit mehreren Feldern vom
> Typ String und ein paar Billig-Methoden war irgendwas um 120 KB gross.
> Wie kommen diese Code-Groessen zustande? Ist das etwa normal fuer C?
Nein, aber es ist normal fuer das was Du programmiert hast.
Betrachten wir Dein "Hello World":
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Hello world\n");
return EXIT_SUCCESS;
}
Sieht kurz aus, oder? Ist es aber nicht:
- printf() ist eine eierlegende Wollmichsau. Da wandert Fliesskommacode,
etliche Formatierfunktionen (schon mal die man-page von printf()
gelesen?) und noch einiges mehr in das Executable.
Der Compiler kennt printf() ja nicht, er generiert einfach einen
Aufruf fuer eine unbekannte Funktion namens printf(). Der Linker
wiederum packt die ganze Mega-Funktion printf() in Dein Programm,
da er ja nicht weiss welche Teile davon gebraucht werden
- der uebliche Startup-Code ist ebenfalls dabei: Kommandozeilenparsing
(-> argc, argv), Bereitstellen von stdin, stdout und stderr als
stdio-Streams und vermutlich auch die Installation einer Speicher-
verwaltung fuer malloc(). Und natuerlich jede Menge Cleanup-Code.
Dass diese Dinge nicht benoetigt werden weiss ja niemand :)
Bei C++ ist es aehnlich. Eine Klasse zieht meistens etliche KB Code
mit in das Executable; woran das liegt kann ich aber nicht schluessig
erklaeren weil ich C++ nicht kenne.
Du darfst Du Dich durch die Groesse der Mini-Programme nicht erschrecken
lassen. Vieles ist Overhead der nur einmal im Executable auftaucht,
egal wie gross das Programm ist. Wenn also bei Deinem 24KB Hello-World
23KB Overhead sind, dann hat auch ein Programm mit 100000 Zeilen
vielleicht nur diese 23KB Overhead.
> Joerg
Christian
--
// Christian Stieber Stieber@Informatik.TU-Muenchen.de
\// Certified Amiga Developer http://www.leo.org/~stieber/
--------------------------------------------------------------------------
Nobody, just nobody
Technical Details
Message-ID:
<40npqm$g8t@sunsystem5.informatik.tu-muenchen.de>Path:
arc1-ca.pugleaf.net!informatik.tu-muenchen.de!stieberReferences:
<YrjLwYkkusiW084yn@unidui.uni-duisburg.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!informatik.tu-muenchen.de!stieber From: stieber@Informatik.TU-Muenchen.DE (Christian Stieber) Newsgroups: de.comp.lang.c++,de.comp.lang.c Subject: Re: Hello World - warum so gross? Followup-To: de.comp.lang.c++,de.comp.lang.c Date: 14 Aug 1995 15:24:06 GMT Organization: Technische Universitaet Muenchen, Germany Distribution: world Message-ID: <40npqm$g8t@sunsystem5.informatik.tu-muenchen.de> References: <YrjLwYkkusiW084yn@unidui.uni-duisburg.de> NNTP-Posting-Host: hphalle6g.informatik.tu-muenchen.de X-Newsreader: TIN [version 1.2 PL2]