πŸš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #136

Re: Hello World - warum so gross?

#136
From: Christian Stieber
Date: Mon, 14 Aug 1995 15:24
59 lines
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!stieber
References: <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]