Mailinglist Archive: opensuse-programming-de (158 mails)
| < Previous | Next > |
Re: C++ templates
- From: Bernhard Walle <Bernhard.Walle@xxxxxx>
- Date: Sat, 17 May 2003 15:13:28 +0200
- Message-id: <20030517131328.GA14616@xxxxxxxxxxxxxxx>
Hallo,
On Sat, 17 May 2003 at 15:01 (+0200), Bodo Kaelberer wrote:
> > hab gerade die aktuelle c't bekommen und mir den Artikel Generische
> > Programmierung durchgelesen, wo es auch um C++ Templates geht. Was ich
> > nicht verstehe ist folgendes
>
> > [...] Die direkte Konsequenz daraus ist, dass Templates keine
> > uebersetzbaren Einheiten sind. Die Implementierungen von Template-
> > Methoden muessen in den Header-Dateien untergebracht werden. Bei der
> > STL bedeutet beispielsweise allein das Einfuegen der Praeprozessor-
> > Direktive
> > #include <stl.h>
> > unter Linux eine Vergroesserung der Objektdatei um 36 kByte. Jede neue
> > Instanz von list kostet weitere 17 kByte. [...]
>
> > Mal abgesehen davon dass ich eine Header-Datei <stl.h> noch nie
> > benoetigt habe (ich hab einfach immer <list>, ... verwendet), dachte
> > ich bisher, dass ein Template alleine, wenn es nicht benoetigt wird,
> > noch gar keinen Code erzeugt. Also ich ging immer davon aus, dass
> > Code erst erzeugt wird, wenn ich z. B. ein Objekt mit list<int>
> > erzeuge oder eine Template-Funktion aufrufe.
>
> So kenne ich das auch. Ich hab auch Zweifel, dass jede Instanz einer
> Liste 17kb braucht. Weil der Code wird nur ein mal uebernommen - egal
> ob Du eine oder 200 Instanzen hat. Nur die Daten kommen so haeufig
> vor, wie Du Instanzen hast. Aber das eine leere Liste 17kb an Daten
> braucht, kann ich nicht glaube.
Nicht jede Instanz, sondern jeder Listentyp, also 17 kB fuer list<int>,
weitere 17 kB fuer list<char> etc. Nur dass durch die Inkludierung einer
Header-Datei schon Speicher gebraucht wird kann ich nicht glauben.
> Wenn Du es wirklich genau wissen willst, dann frag in obiger
> Newsgroup.
Gar keine so schlechte Idee. Werde ich tun.
Gruss,
Bernhard
--
_________ http://www.bwalle.de _________________________________________________
"Zivilcourage ist das, was von einem Menschen übrig bleibt, wenn der
Vorgesetzte das Zimmer betritt."
-- Wernher von Braun
On Sat, 17 May 2003 at 15:01 (+0200), Bodo Kaelberer wrote:
> > hab gerade die aktuelle c't bekommen und mir den Artikel Generische
> > Programmierung durchgelesen, wo es auch um C++ Templates geht. Was ich
> > nicht verstehe ist folgendes
>
> > [...] Die direkte Konsequenz daraus ist, dass Templates keine
> > uebersetzbaren Einheiten sind. Die Implementierungen von Template-
> > Methoden muessen in den Header-Dateien untergebracht werden. Bei der
> > STL bedeutet beispielsweise allein das Einfuegen der Praeprozessor-
> > Direktive
> > #include <stl.h>
> > unter Linux eine Vergroesserung der Objektdatei um 36 kByte. Jede neue
> > Instanz von list kostet weitere 17 kByte. [...]
>
> > Mal abgesehen davon dass ich eine Header-Datei <stl.h> noch nie
> > benoetigt habe (ich hab einfach immer <list>, ... verwendet), dachte
> > ich bisher, dass ein Template alleine, wenn es nicht benoetigt wird,
> > noch gar keinen Code erzeugt. Also ich ging immer davon aus, dass
> > Code erst erzeugt wird, wenn ich z. B. ein Objekt mit list<int>
> > erzeuge oder eine Template-Funktion aufrufe.
>
> So kenne ich das auch. Ich hab auch Zweifel, dass jede Instanz einer
> Liste 17kb braucht. Weil der Code wird nur ein mal uebernommen - egal
> ob Du eine oder 200 Instanzen hat. Nur die Daten kommen so haeufig
> vor, wie Du Instanzen hast. Aber das eine leere Liste 17kb an Daten
> braucht, kann ich nicht glaube.
Nicht jede Instanz, sondern jeder Listentyp, also 17 kB fuer list<int>,
weitere 17 kB fuer list<char> etc. Nur dass durch die Inkludierung einer
Header-Datei schon Speicher gebraucht wird kann ich nicht glauben.
> Wenn Du es wirklich genau wissen willst, dann frag in obiger
> Newsgroup.
Gar keine so schlechte Idee. Werde ich tun.
Gruss,
Bernhard
--
_________ http://www.bwalle.de _________________________________________________
"Zivilcourage ist das, was von einem Menschen übrig bleibt, wenn der
Vorgesetzte das Zimmer betritt."
-- Wernher von Braun
| < Previous | Next > |