Sé que el compilador puede o no realizar la expansión en línea de una función, ya sea que el programador lo solicite o no.
Tenía curiosidad por saber, ¿hay alguna manera de que el programador pueda saber con certeza si el compilador ha definido una función en particular?Funciones en línea
Respuesta
Aparte de ver el código generado, no. Algunas implementaciones pueden proporcionar esa información pero no es requerida por el estándar.
Cosas como inline
o register
(estremecimiento) son sugerencias para el compilador y es gratis para aceptarlos, ignorarlos o incluso mentir a usted que lo ha hecho, mientras en secreto ir detrás de la espalda y no hacerlo :-)
Tiendo a no utilizar características como esa ya que sospecho que el compilador a menudo sabe mejor que yo cómo extraer el máximo rendimiento de mi código.
Lea el desmontaje del archivo de objeto.
Configure su compilador para generar código de ensamblador y verifique allí.
Y si tiene diferentes indicadores para compilaciones de versiones de depuración v, asegúrese de usar el último. He visto algunos compiladores que nunca se alinean a menos que tenga al menos alguna optimización habilitada. –
Puede crear un perfil de su código y ver si la función de interés aparece en la pila de llamadas. Aunque, supongo que no hay garantía si su tasa de muestreo de pila no es lo suficientemente alta.
Pero puede probar que se colocarán en línea: si sabe A
llamadas B
, lo que exige C
y A
nunca llama C
directamente, si ves A
llamando C
en la pila de llamadas, ya sabes B
se inline para esa llamada .
No hay forma de saber, excepto para mirar el ensamblador de salida.
Los compiladores actualmente son "inteligentes" y deciden qué funciones incluir y en qué casos.
Al igual que la palabra clave de registro, los compiladores seleccionan estos días y realmente ignoran sus solicitudes.
No creo que hay una manera de averiguar lo que quiere,
Pero puede aumentar las posibilidades de la función de ser una función en línea por,
Hacer la definición de la función visibles a la unidad de traducción en la que se llama. es decir, siempre debe colocar la definición de una función en línea en el archivo de encabezado.
- 1. Funciones en línea en C++
- 2. ¿Hay funciones en línea en Java?
- 3. Como hacer funciones en línea en C#
- 4. Error de enlace para funciones en línea
- 5. retorno por valor funciones en línea
- 6. Funciones escalares en línea: ¿real o vaporware?
- 7. Funciones de una línea en C?
- 8. ¿Funciones en línea con enlace interno?
- 9. Averiguar qué funciones estaban en línea
- 10. funciones en línea todavía aparecen en el archivo .prof
- 11. Comportamiento de las funciones en línea __LINE__ en
- 12. C Funciones en línea y uso de memoria
- 13. Cómo saber qué funciones NO estaban en línea
- 14. C funciones en línea y error "indefinido externo"
- 15. Funciones en línea definidas por el usuario OpenCL
- 16. C++ funciones en línea usando GCC - ¿por qué la LLAMADA?
- 17. ¿Cómo documentas las funciones y clases de PHP en línea?
- 18. Definición múltiple de funciones en línea al vincular bibliotecas estáticas
- 19. ¿Cómo se diferencian las funciones de MATLAB y la línea?
- 20. Lista de procedimientos almacenados/funciones Línea de comandos de Mysql
- 21. Cómo refactorizar estas funciones que tienen una línea diferencia
- 22. encabezado lleno de funciones en línea, ¿puedo mover el código fuera del archivo de encabezado y todavía en línea todo?
- 23. Mejores prácticas: ¿muchas funciones/métodos pequeños, o funciones más grandes con componentes de proceso lógicos en línea?
- 24. funciones dentro de las funciones en C
- 25. ¿Las funciones en línea en C/C++ son una forma de hacerlas seguras para subprocesos?
- 26. ¿La definición de funciones en línea de C++ debe estar en el mismo archivo?
- 27. ¿Están las funciones definidas en los encabezados garantizadas para estar en línea?
- 28. En C++ ¿el constructor y el destructor pueden ser funciones en línea?
- 29. Funciones en línea en la creación de depuración (Visual C++ 2008)
- 30. funciones automáticamente en línea en unidades de traducción y gcc 4.6
Pregunta más apropiada, ¿hay alguna manera por la cual el programador pueda saber con certeza que el compilador ha escrito una función particular * call *? – Potatoswatter