puede cualquiera, por favor decir lo que es el uso de la palabra inline en Delphi¿cuál es el uso de la palabra inline en Delphi
Respuesta
Es una sugerencia para el compilador que la función/procedimiento debería ser (si es posible) inline, es decir, cuando usted lo llama debería expandirse como una macro en lugar de ser llamado.
Esta es una optimización para funciones (muy) pequeñas donde la sobrecarga de una llamada sería significativa. Encontrará muchos ejemplos en, por ejemplo, windows.pas
Lo que realmente sucede depende de la complejidad de la función, el acceso público/privado y su versión Delphi.
Le dice al compilador que genere código para el en línea; rutina en el lugar donde se llama, en lugar de saltar a la rutina y volver.
Para los procedimientos que se traducen en ensamblador muy corto, esto puede ser un beneficio para el rendimiento, porque el código real es relativamente corto en comparación con la preparación del parámetro, la llamada real y el procedimiento prólogo/epílogo.
Si el procedimiento es demasiado largo, puede ser un freno en el rendimiento sin embargo, e inflar su código de forma espectacular.
+1 Prefiero esta respuesta. Muy bien explicado. –
Otros han respondido lo que hace en línea, pero solo quería señalar que hay una opción de compilación para establecer en línea encendido, apagado o automático. Consulte "Procedimientos y funciones de llamada" en los documentos de D2009 para obtener una explicación muy buena de la mecánica de inline. Aquí está el enlace a los documentos en línea:
Ha tomado de C en que le dice al compilador que se trata de una rutina corta que se llama con frecuencia y se recomienda que el compilador trata la función como una macro y integra el código de función directamente en el programa en el punto llamado en lugar de usar una llamada de función.
Esto proporciona un código más rápido porque no hay una sobrecarga de llamada de función, sino a expensas de un programa más grande. Tenga en cuenta también que, como en C, esta es una recomendación para el compilador, en realidad no tiene que hacerlo y el optimizador puede anularlo.
¿Dónde hacer esto? Bueno, como el desenrollado de lazo, es una técnica que rara vez se usa hoy en día. El lugar clásico para usar esto es profundo en una estructura anidada que es crítica en tiempo real, como la representación de código en una aplicación de gráficos donde algunas llamadas de máquina afeitadas en cada iteración pueden aumentar la frecuencia de actualización de la pantalla.
El D2005 en línea es lo que describes. El Delphi 2006+ en línea puede alinear la unidad de compilación cruzada sin declarar la función completamente en un encabezado. Eso es mucho más difícil y algo que C normalmente no es capaz de hacer (aunque ciertos sistemas de optimización global lo intentan) –
Presione Ctrl + Alt + C (ventana completa de depuración de CPU) mientras realiza la depuración en Delphi, antes de llamar a su función en línea. Y verá que las funciones en línea comienzan sin "llamar" y que saltan a otra dirección. Es la función de optimización.
- 1. ¿Cuál es el uso de la palabra clave final?
- 2. ¿Cuál es el uso de la palabra clave volátil?
- 3. Delphi 2010 inline inútil?
- 4. ¿Cuál es la palabra para "habilitar/deshabilitar"?
- 5. ¿Cuál es el uso de typedef?
- 6. ruby: ¿Cuál es el significado de la palabra clave "en"
- 7. Por favor, dígame ¿cuál es el uso de la palabra clave "default" en C# .NET
- 8. ¿Cuál es el uso de la palabra clave/método "usar" en groovy?
- 9. ¿Cuál es el uso de la palabra clave global :: en C#?
- 10. ¿Cuál es el uso de qGetPtrHelper en este ejemplo?
- 11. ¿La palabra clave "con" Delphi es una mala práctica?
- 12. ¿Cuál es el uso de la sintaxis = =?
- 13. ¿Cuál es la diferencia entre "palabra clave" y "palabra reservada"?
- 14. ¿Cuál es el propósito de la palabra clave SQL "AS"?
- 15. ¿Cuál es el significado real de la palabra clave "this"?
- 16. el uso de la palabra clave privada
- 17. ¿Cuándo es "inline" ineficaz? (en C)
- 18. El uso de IsAssignableFrom y "es" palabra clave en C#
- 19. Cuál es el punto de "Como" palabra clave en C#
- 20. ¿Cuál es el propósito de esta palabra clave en C#
- 21. Uso de Inline :: CPP vs SWIG: ¿cuándo?
- 22. ¿Cuál es el uso correcto de GetLastError y FormatMessage en Delphi?
- 23. ¿Cuál es la palabra clave de rendimiento utilizada en C#?
- 24. ¿Cuál es el mejor algoritmo para la palabra más cercana
- 25. ¿Cuál es la diferencia entre los parámetros de cierre y la palabra clave 'uso'?
- 26. ¿Cuál es el uso del uso de init() en JavaScript?
- 27. ¿Cuál es la expresión regular de una palabra en español?
- 28. ¿cuál es el uso real de la interfaz en java?
- 29. ¿Cuál es el uso de la interfaz IClonable en .NET?
- 30. ¿Cuál es el uso de la sobrecarga const en C++?
¿Es realmente el compilador quien realmente se ocupa de esta directiva? Intenté compilar una unidad usando 'Borland Delphi Version 15.0' pero no pude encontrar la directiva en línea. –
en línea es D2005 + pero solo funciona la unidad cruzada desde D2006 iirc. Y sí, el compilador lo hace. Tampoco es realmente como una macro (la línea de entrada no funciona en el nivel de fuente, pero un nivel más profundo, después del análisis, en el nivel de código generado) –