Czytam, że szablony są stosowane w różnych jednostkach, więc czy oznacza to, że rozmiar binarny będzie taki sam, jak my go spełniliśmy przy użyciu różnych funkcji?Czy szablony skracają rozmiar kodu źródłowego lub binarnego albo obydwa?
Odpowiedz
Powinny one skrócić rozmiar źródła (jeśli są ponownie użyte), ale nie rozmiar binarny (szablon jest kompilowany dla każdego innego wystąpienia).
To różni się od generycznych Java, gdzie występuje pełne wymazywanie typów (generyczne służą tylko jako weryfikacja typów w czasie kompilacji typów) lub C#, gdzie generics są kompilowane do konkretnych plików binarnych, które mogą być bezpośrednio ponownie użyte bez konieczności ponownego kompilowania i generowania więcej kodu.
Rozmiar binarny zależy od kompilatora i optymalizacji wykonywanych przez kompilator w celu zmniejszenia rozmiaru kodu poprzez eliminację redandantowego kodu.
Nowoczesne kompilatory są w stanie wykryć nadmiarowy kod, więc rozmiar binarny nie zwiększy się dramatycznie przy użyciu szablonów.
Rozumiem, że dla każdego typu utworzyć wystąpienia z szablonem kompilator produkuje odpowiedniej klasy pasujące do tego typu - więc jeśli używasz List<int>
, List<foo>
i List<float>
będzie skutecznie trzy różneList
zajęcia w swojej spełnione binarny .
Edit:
czego nie było wyraźnie stan że ja wywodząc, że łączenie kilku klas w do jednego szablonu (prawdopodobnie) nie zmniejsza rozmiaru binarny, ale należy zmniejszyć rozmiar twoje źródło.
Twoje zrozumienie jest dobre, a także zauważ, że (o ile ręcznie nie utworzysz klasy), tylko te metody, które są faktycznie używane, zostaną skompilowane. Nie dodałem tego do mojej odpowiedzi, ponieważ linkery mogą usunąć nieużywany kod z pliku binarnego, więc podobna optymalizacja miejsca jest dostępna dla kodu niezwiązanego z szablonem i nie ma to znaczenia. +1 –
Szablony zdecydowanie będą sposobem na napisanie bardziej ogólnego i krótszego kodu. Zamiast wpisywać swoją funkcję n razy, aby poradzić sobie z różnymi typami parametrów, zapisujesz ją raz typowym typem dla parametru.
Jeśli chodzi o rozmiar binarny, zostanie wygenerowany kod dla wystąpień szablonu, to znaczy, gdy zostanie określony typ. Nie widzę, jak to skracałoby binarne rozmiary.
To zależy ... Jeśli zamierzałeś zaimplementować dla każdego typu oddzielną klasę, zmniejszy się rozmiar kodu źródłowego.
W wersji binarnej najprawdopodobniej nie widać żadnej znaczącej różnicy, ponieważ jeśli zamierzałeś zaimplementować oddzielną klasę dla każdego typu, a nie zrobiłeś tego, ponieważ używałeś szablonów, nie znaczy to, że zmniejszy się rozmiar binarny , ponieważ ten kod zostanie wygenerowany przez kompilator (dla instancji), więc nie możesz mieć żadnej znaczącej różnicy, ponieważ "kod jest taki sam".
- 1. Rozmiar kodu źródłowego, praktyczny, teoretyczny i absurdalny
- 2. Pobieranie kodu źródłowego Android
- 3. Wyświetlanie kodu źródłowego Gem
- 4. Szablony kodu NetBeans $ {date}?
- 5. Pobieranie kodu źródłowego Eclipse
- 6. Zasady kontroli kodu źródłowego
- 7. Czy umieszczasz kompilacje w repozytorium kodu źródłowego?
- 8. Debugowanie kodu źródłowego JBoss
- 9. Narzędzie do przypisywania kodu źródłowego
- 10. Generator kodu źródłowego pliku Bazel
- 11. Drukowanie kodu źródłowego bloku Ruby
- 12. Jak mierzyć statystyki kodu źródłowego?
- 13. Kontrola czułości kodu źródłowego TFS
- 14. Szablony wyrażeń zamiast kodu odręcznego
- 15. Moduł sprawdzający gramatykę kodu źródłowego
- 16. Kodowanie kodu źródłowego Xcode 4.3.2
- 17. Kontener kodu źródłowego Visual Composer
- 18. Maven: rozmiar pliku binarnego zmienia rozmiar pliku po kompilacji
- 19. Jak znaleźć rozmiar statycznych przydziałów z binarnego?
- 20. parsowanie kodu źródłowego C++ w środowisku java
- 21. Usunięcie formantu asp.net z kodu źródłowego
- 22. Tworzenie kodu źródłowego z IDE Delphi
- 23. Wyszukiwanie kodu źródłowego dla wbudowanych funkcji Pythona?
- 24. Tworzenie szablonu strony niezależnej od kodu źródłowego w webformach asp.net
- 25. Konwersja drzewa wyrażenie do kodu źródłowego ciąg
- 26. Idiomatyczne podejście do struktury kodu źródłowego Clojure
- 27. Drukowanie kodu źródłowego w systemie Windows
- 28. Polecenia WPF - Robiąc to bez kodu źródłowego
- 29. Czy istnieje program do formatowania kodu źródłowego Groovy?
- 30. Czy istnieje dokument omawiający strukturę kodu źródłowego vima?
Wątpię, czy kompilator może zrobić więcej przy użyciu szablonów niż przy niesformatowanych funkcjach. Szablony mają powiązania zewnętrzne, więc nie można ich usunąć z pliku obiektowego, a każda technika, za pomocą której można zredukować wewnętrzny kod szablonu, będzie również używana dla kodu niemormowanego. –