Ich lese, dass Vorlagen in verschiedenen Entitäten übereinstimmen, so bedeutet das, dass die binäre Größe gleich sein wird, wie wir es mit verschiedenen Funktionen erfüllt haben?Tun Vorlagen verkürzen die Größe der Quelle oder binär oder beide
Antwort
Sie sollten die Quellgröße verkürzen (wenn sie wiederverwendet werden), aber nicht die Binärgröße (die Vorlage wird für jede unterschiedliche Instanziierung kompiliert).
Diese von Java Generika unterscheidet, wo es einen vollständigen Typ Löschung ist (Generika als Kompilierung Überprüfung der Typen nur dienen) oder C#, in denen Generika in spezifische Binärdateien kompiliert werden, die neu kompiliert werden direkt wiederverwendet werden können, ohne dass und erzeugen mehr Code.
Die binäre Größe hängt von Ihrem Compiler und den Optimierungen ab, die der Compiler durchführen wird, um die Code-Größe zu reduzieren, indem redandant-Code entfernt wird.
Moderne Compiler können redundanten Code erkennen, so dass die Binärgröße durch die Verwendung von Vorlagen nicht dramatisch zunimmt.
Mein Verständnis ist, dass Sie für jeden Typ mit einer Vorlage instanziiert die complier die entsprechende Klasse produziert diese Art passen - so, wenn Sie List<int>
verwenden, List<foo>
und List<float>
wird es effektiv drei verschiedenenList
Klassen in Ihrer erfüllt binär .
Edit:
Was habe ich nicht explizit Zustand war, dass ich schließen, dass in zu einer einzigen Vorlage (wahrscheinlich) werden mehrere Klassen Verschmelzung nicht die Größe Ihrer binären zu reduzieren, sollte aber die Größe reduzieren deine Quelle.
Ihr Verständnis ist gut, und beachten Sie auch, dass (nur wenn Sie die Klasse manuell instanziieren) nur die Methoden, die tatsächlich verwendet werden, kompiliert werden. Ich habe das zu meiner Antwort nicht hinzugefügt, da Linker nicht verwendeten Code aus der Binärdatei entfernen können, sodass eine ähnliche Speicherplatzoptimierung für nicht vorlagenbasierten Code verfügbar ist und das keinen Unterschied macht. +1 –
Vorlagen werden definitiv eine Möglichkeit sein, generischer und kürzerer Code zu schreiben. Anstatt Ihre Funktion blah
n mal zu schreiben, um mit verschiedenen Arten von Parametern umzugehen, schreiben Sie sie einmal mit einem generischen Typ für den Parameter.
In Bezug auf die binäre Größe wird Code für die Instanziierungen generiert, die Sie von der Vorlage vornehmen, dh wenn Sie einen Typ angeben. Ich sehe nicht, wie es binäre Größen verkürzen würde.
Es kommt darauf an ... Wenn Sie für jeden Typ eine separate Klasse implementieren würden, würde sich die Quellcodegröße verringern.
Am wahrscheinlichsten werden Sie keinen signifikanten Unterschied sehen, denn wenn Sie separate Klasse für jeden Typ implementieren würden und Sie nicht, weil Sie Vorlagen verwendet haben, bedeutet dies nicht, dass die binäre Größe abnimmt , weil dieser Code vom Compiler generiert wird (für die Instanziierungen), Sie dürfen also keinen signifikanten Unterschied haben, weil "code ist gleich".
- 1. Binär-String in Binär- oder Dezimalwert umwandeln
- 2. Tracing-Quelle zu binär
- 3. Binär oder "|" in Ruby
- 4. Push-Benachrichtigungen oder Socket.io ?, oder beide?
- 5. Lisp binär Größe
- 6. Gibt es eine Verbindungszeichenfolgeneigenschaft, um die Größe von Binär- oder Textdaten ADO.NET für SQL Server anzugeben?
- 7. Wo ist Jaybird für ARM-Binär/Quelle?
- 8. HTML-Script-Tag: Typ oder Sprache (oder beide weglassen)?
- 9. Zwei Textfelder, eines oder beide, sind erforderlich
- 10. Scala Buffer: Größe oder Länge?
- 11. Beste weg speicher binär oder bild dateien
- 12. Wie erhält man das ODER-Verknüpfungsergebnis von binär dargestellten Strings?
- 13. System.Data.SqlClient.Exception (0x80131904) Zeichenfolge oder binär würde beendet
- 14. Responsive Bilder: Größe ändern oder dynamisch zuschneiden?
- 15. Tun DeleteFile() oder CopyFile() Ausnahmen?
- 16. Wenn beide Checkboxen falsch false tun?
- 17. C++ Funktionsmodifikatoren im Header oder in der Quelle? Kurzreferenz
- 18. XSD-Validierung - Entweder eins oder beide
- 19. Größe des Ordners oder der Datei ermitteln
- 20. Größe der Maschine 64 oder 32 Bit
- 21. MVVM Licht mit MvvmCross oder verwenden beide
- 22. Größe der Ordereddict oder dict weniger als die konstituierenden Elemente?
- 23. Python bedingte der eine oder andere aber nicht beide
- 24. Scala mit JSON und/oder XML Vorlagen
- 25. HTML-Quelle oder Rich Text aus der X-Zwischenablage abrufen
- 26. Dymola Befehl zum Maximieren oder Manipulieren der Größe oder Platzierung des Plotfensters
- 27. XPath-aware XML-Vorlagen oder Inhaltshilfe
- 28. Schienen Modell Vorlagen (oder Instanz Vererbung) Optionen?
- 29. Hat Mandrill eine Beschränkung der E-Mail-Größe oder der POST-Größe über die API?
- 30. Verkürzen der ES2015-Importpfade
Ich bezweifle, dass der Compiler kann mehr mit Vorlagen als mit nicht-Template-Funktionen. Vorlagen verfügen über eine externe Verknüpfung, sodass sie nicht aus der Objektdatei entfernt werden können. Jede Technik, mit der der interne Code der Vorlage reduziert werden kann, wird auch für nicht vorlagenbasierten Code verwendet. –