2012-06-24 28 views
8

he estudiado queProfundidad de procesos en línea en el compilador GCC

El comitente en línea es una sugerencia para el compilador que debe intentar para generar el código [...] en línea en lugar de que se establece el código para el función una vez y luego llamar a través de la función habitual llamar al mecanismo .

Preguntas:

  1. Si se desactiva la optimización para el compilador GCC, se ignora el comitente en línea?
  2. Cuando las funciones en línea se llaman recursivamente, ¿qué opción del compilador determina la "profundidad de la alineación", hasta que sigue el mecanismo de llamada a la función normal?
  3. Si se invoca la función en línea dentro de un bucle for, ¿entra en la imagen la misma "profundidad de alineación"?

Respuesta

7

Si se desactiva la optimización para el compilador GCC, se ignora el comitente en línea?

Sí, si la optimización está desactivada en GCC, ninguna función estaría en línea. Es equivalente a usar el indicador -fno-inline durante la compilación. Ver este link

-fno-inline

Don't pay attention to the inline keyword. Normally this option is used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.

Cuando las funciones en línea se denominan de forma recursiva, lo que determina la opción de compilador 'profundidad de inline', hasta que se sigue el mecanismo de llamada a la función normal?

Opciones max-inline-recursive-depth y max-inline-recursive-depth-auto. La profundidad predeterminada es 8.

2

Además de -fno-inline, también necesita usar -fno-default-inline para deshabilitar las funciones en línea en las clases. Esto es útil cuando usa gdb para acceder a esas funciones en línea.

Cuestiones relacionadas