He visto en muchos lugares que las personas a menudo usan la opción al compilar el código C/C++ y me pregunto, ¿es seguro el uso de esa opción? ¿Para qué se usa esto?-fomit-frame-pointer, ¿es seguro usarlo?
Muchas gracias, mis mejores deseos.
He visto en muchos lugares que las personas a menudo usan la opción al compilar el código C/C++ y me pregunto, ¿es seguro el uso de esa opción? ¿Para qué se usa esto?-fomit-frame-pointer, ¿es seguro usarlo?
Muchas gracias, mis mejores deseos.
La opción es segura pero hace que la depuración sea más difícil. Normalmente, el compilador C emite código que almacena en un registro convencional (ebp
en x86) un puntero al marco de pila para la función. Los depuradores usan eso para imprimir contenidos de variables locales y otra información similar. La bandera indica a gcc que no se moleste con ese registro. En algunas situaciones, esto puede generar un ligero aumento en el rendimiento, principalmente debido a la menor huella de código (mejor para la memoria caché) y al registro adicional disponible (especialmente en x86 en modo de 32 bits, que es notoriamente aniquilado en los registros).
Siempre que su código no dependa de un comportamiento indefinido, entonces es perfectamente seguro. Sin embargo, puede provocar errores de comportamiento indefinidos.
@Thomas podría proporcionar algunos enlaces (si lo conoce) sobre los detalles del registro como usted mencionó. – Adil
Consulte http://refspecs.freestandards.org/elf/, en particular, los documentos de la "Interfaz binaria de la aplicación" para las arquitecturas de procesador específicas. En el ABI para i386, el formato de marco de pila estándar (con el uso de 'ebp') se describe en la página 36. El formato ELF es común para muchos sistemas" modernos "similares a Unix (por ejemplo, Linux y FreeBSD). En los sistemas Windows, las cosas son ligeramente diferentes pero usan los mismos principios. –