2010-02-25 23 views
6

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.

Respuesta

11

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

+0

@Thomas podría proporcionar algunos enlaces (si lo conoce) sobre los detalles del registro como usted mencionó. – Adil

+0

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

2

Siempre que su código no dependa de un comportamiento indefinido, entonces es perfectamente seguro. Sin embargo, puede provocar errores de comportamiento indefinidos.