2010-03-05 13 views
5

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

+2

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

Respuesta

10

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.

0

Lea el desmontaje del archivo de objeto.

1

Configure su compilador para generar código de ensamblador y verifique allí.

+0

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. –

2

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 .

0

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.

0

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.

Cuestiones relacionadas