Leí que las plantillas se cumplen en diferentes entidades, ¿eso significa que el tamaño del binario será el mismo que el que hemos utilizado con diferentes funciones?¿Las plantillas acortan el tamaño de la fuente o el binario o ambos?
Respuesta
Deben acortar el tamaño de la fuente (si se reutilizan) pero no el tamaño binario (la plantilla se compila para cada instanciación diferente).
Esto difiere de los genéricos de Java, donde hay un borrado de tipo completo (los genéricos solo sirven como verificación de compilación de tipos) o C#, donde los genéricos se compilan en binarios específicos que se pueden reutilizar directamente sin tener que recompilar y generar mas codigo
El tamaño del binario depende de su compilador y de las optimasaciones que el compilador realizará para reducir el tamaño del código eliminando el código relegado.
Los compiladores modernos son capaces de detectar código redundante, por lo que el tamaño del binario no aumentará espectacularmente mediante el uso de plantillas.
Mi entendimiento es que para cada tipo se ejemplariza con una plantilla del compilador produce la clase correspondiente para que coincida con el tipo - por lo que si se utiliza List<int>
, List<foo>
y List<float>
no será efectiva tres diferentesList
clases en su binario cumplido .
Editar:
lo que no estaba explícitamente el estado que estoy inferir que la fusión de varias clases en una sola plantilla será (probablemente) no reducir el tamaño de su binario, pero debería reducir el tamaño de tu fuente
Su comprensión es buena, y también tenga en cuenta que (a menos que instancia manualmente la clase) solo se compilarán los métodos que realmente se utilizan. No lo agregué a mi respuesta, ya que los vinculadores pueden eliminar el código no utilizado del binario, por lo que una optimización de espacio similar está disponible para el código sin plantillas y eso no hace la diferencia. +1 –
Las plantillas definitivamente serán una forma de escribir códigos más genéricos y más cortos. En lugar de escribir su función blah
n veces para tratar diferentes tipos de parámetros, la escribe una vez con un tipo genérico para el parámetro.
En cuanto al tamaño binario, se generará código para las instancias que haga de la plantilla, es decir, cuando especifique un tipo. No veo cómo podría acortar los tamaños binarios.
Depende ... Si fuera a implementar para cada tipo una clase por separado, el tamaño del código fuente disminuirá.
En cuanto a binario, lo más probable es que no veas ninguna diferencia significativa, porque si vas a implementar clases separadas para cada tipo y no lo hiciste porque has usado plantillas, eso no significa que el tamaño binario disminuirá , porque ese código será generado por el compilador (para las instancias), por lo que no debe haber ninguna diferencia significativa porque "el código es el mismo".
- 1. Etiquetas o Buscar o Ambos
- 2. backbone o ext/sencha touch o ambos
- 3. MVC o Rest o Ambos
- 4. categorías, etiquetas o ambos?
- 5. Anular copiar o copiarWithZone: ¿o ambos?
- 6. ¿Apio, habichuelas o ambos?
- 7. Rieles: format.js o format.json, o ambos?
- 8. Analizador binario o serialización?
- 9. ¿Debo definir el índice (A) y el índice (B), o el índice (A, B) o ambos?
- 10. ¿Cómo encontrar el tamaño de las asignaciones estáticas desde binario?
- 11. ¿Puedo cambiar el tamaño o la fuente en la sección fuente de la página de visualización desde un navegador?
- 12. Encuentra la mediana en O (1) en el árbol binario
- 13. Simultaneidad de rack: rack.multithread, async.callback o ambos?
- 14. ¿El tamaño de fuente afecta la representación de ligaduras?
- 15. ¿Tiene usted control de versión de las aplicaciones normales o de todo el proyecto o de ambos?
- 16. ¿Debo aprender ASP.NET AJAX, jQuery o ambos?
- 17. Incluyendo archivos de encabezado estándar. string.h o cstring? ¿o ambos?
- 18. Android: Google SSO - OAuth o AccountManager? ¿O ambos?
- 19. ¿Cambiar el tamaño de la fuente macvim?
- 20. ¿Cómo puedo obtener el tamaño de fuente y el nombre de la fuente de un UILabel?
- 21. linux + verificar si el archivo es de texto o binario
- 22. soapClient usa SoapFault o Exception o ambos para detectar Error?
- 23. Usando un DataTrigger para cambiar Solo el margen izquierdo o derecho (o ambos)
- 24. cambiar el tamaño del texto (tamaño de fuente) al cambiar el tamaño de la ventana?
- 25. A o B, no ambos, ninguno tampoco
- 26. Silverlight: ¿Debo utilizar IDataErrorInfo, INotifyDataErrorInfo, o ambos?
- 27. Respuesta REST: ¿debo poner la URL del nuevo recurso en el encabezado, el cuerpo o ambos?
- 28. Cómo establecer el tamaño de fuente en un control de Windows Phone 7 Pivot o PivotItem
- 29. C# Prevenir el cambio de tamaño de ambos paneles splitcontainer
- 30. Cambiar el tamaño de la fuente en la lista o cuadrícula de WPF para usar espacio correctamente
Dudo que el compilador pueda hacer algo más con las plantillas que con las funciones sin plantilla. Las plantillas tienen una vinculación externa, por lo que no se pueden eliminar del archivo objeto, y cualquier técnica que pueda usar para reducir el código interno de la plantilla también se usará para código que no tenga una plantilla. –