"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Pueden los compiladores optimizar las llamadas 'nuevas' en C ++?

¿Pueden los compiladores optimizar las llamadas 'nuevas' en C ++?

Publicado el 2025-03-25
Navegar:223

Can Compilers Optimize Away `new` Calls in C  ?

¿Puede el compilador eliminar las asignaciones de memoria del montón?

en c, el nuevo operador se usa para asignar memoria en el montón. Los compiladores pueden optimizar el código, incluida la eliminación de declaraciones innecesarias. Los compiladores pueden eliminar las asignaciones de memoria del montón realizadas con el uso de nuevos?

Compilador Behavior

La investigación indica que los diferentes compiladores manejan las asignaciones de HEAP de manera diferente:

    g (5.2.0) y los compiladores visuales de la actualización no optimizan las nuevas llamadas. (3.0) Optimiza la nueva llamada, incluso con los indicadores de optimización completos.
  • Validez de la optimización

La validez de las optimizaciones del compilador es un tema de debate. Algunos argumentan que el compilador no puede optimizar nuevas llamadas, ya que pueden tener un comportamiento observable (por ejemplo, lanzar una excepción). Otros sostienen que se permite la optimización de nuevas llamadas si el compilador puede garantizar que ningún comportamiento observable se verá afectado.

c 14 estándar

n3664: Aclarar la asignación de memoria aclaró las reglas con respecto a las optimizaciones del compilador y la asignación de memoria. Permite a los compiladores optimizar alrededor de las asignaciones de memoria en ciertos escenarios. Sin embargo, la disposición ha sido criticada ya que potencialmente viola la causalidad.

consideraciones adicionales

sin tracción nueva
    : clang también optimiza las llamadas al no receptivo a los nuevos operadores. Las nuevas implementaciones del operador en diferentes unidades de traducción podrían afectar la validez de las optimizaciones del compilador relacionadas con las asignaciones de montón.
  • Conclusion
  • La capacidad del compilador para optimizar las asignaciones de memoria de la memoria es un problema complejo que involucra un comportamiento de compilador, estándares del lenguaje y posibles excesiones. Mientras que algunos compiladores implementan esta optimización basada en N3664, su validez sigue siendo un tema de discusión y depende de circunstancias específicas, incluido el estándar C y la presencia de asignadores de memoria personalizados.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3