Optimización de la compilación de aprendizaje de C ++

Plegado constante

Encuentre el valor de una expresión constante como una constante e incrústela en el código final generado.

Pregunta: Para una expresión constante muy compleja, ¿calculará el compilador el resultado y luego lo compilará? ¿O esta expresión se traduce completamente al código de la máquina, y finalmente se deja que el programa la resuelva?

Situación:

  • Si el plegamiento constante implicado es obligatorio según la especificación del lenguaje. Si es así, el compilador que cumple con la especificación debe (realizará) el plegamiento constante.
  • Si no cumple con el elemento anterior, es un problema con la calidad de la implementación del compilador. Un compilador es libre de elegir si desea hacer una optimización de plegado constante. Es posible que se pueda configurar el mismo compilador para que funcione en diferentes niveles de optimización. Quizás algún código que no esté plegado por una constante en un nivel de optimización más bajo se optimice en un nivel de optimización más alto.

Propagación constante

Considere el siguiente ejemplo:

int x = 40;
int y = x + 2;

Al igual que el lenguaje C y el lenguaje Java, la expresión inicial x + 2 de y no se definirá como una expresión constante en el nivel de especificación del lenguaje. Pero intuitivamente sentimos que el compilador también debería poder plegarlo para constantes.

Esto requiere una constante optimización de propagación.

Pero se permite asignar una variable varias veces, como por ejemplo:

int x = 40;
x = rand();
int y = x + 2;

Para lograr una propagación constante, debe confiar en el análisis de flujo de datos hacia adelante de "reenvío a valor fijo" (análisis de flujo de datos de palabras rápidas) para determinar si se puede propagar un valor fijo a los puntos de uso.

Supongo que te gusta

Origin www.cnblogs.com/CocoML/p/12727165.html
Recomendado
Clasificación