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