Al compilar C++ con GCC 4.4 o MSVC, ¿es posible hacer que el compilador emita mensajes cuando una función está en línea?Averiguar qué funciones estaban en línea
Respuesta
con g ++, no creo que usted puede hacer g ++ informe de eso, sino que se puede examinar el binario resultante con cualquier herramienta que muestra los símbolos, nm
por ejemplo:
#include <iostream>
struct T {
void print() const;
};
void T::print() const { std::cout << " test\n" ; }
int main()
{
T t;
t.print();
}
~ $ g++ -O3 -Wall -Wextra -pedantic -o test test.cc
~ $ nm test | grep print
0000000000400800 t _GLOBAL__I__ZNK1T5printEv
0000000000400830 T _ZNK1T5printEv
vs
#include <iostream>
struct T {
void print() const { std::cout << " test\n" ; }
};
int main()
{
T t;
t.print();
}
~ $ g++ -O3 -Wall -Wextra -pedantic -o test test.cc
~ $ nm test | grep print
(sin salida desde nm en el segundo caso)
EDIT: Además, los perfiladores pueden ser útiles. gprof muestra, en estos dos ejemplos:
0.00 0.00 0.00 1 0.00 0.00 global constructors keyed to _ZNK1T5printEv
0.00 0.00 0.00 1 0.00 0.00 T::print() const
vs solo
0.00 0.00 0.00 1 0.00 0.00 global constructors keyed to main
FWIW, dependiendo de cómo se usan las funciones, el compilador puede alinear algunas instancias y no otros Si el programa es lo suficientemente grande, sería necesario algo más sofisticado. – Cogwheel
De hecho. Me pregunto si los perfiladores informan algo así (gprof no parece). Podría ser una pequeña herramienta útil para escribir. – Cubbi
Gracias. Puedo ver diferencias en los binarios compilados. La única versión del encabezado parece haber incorporado más funciones. Corrí en gprof antes (compilado con -pg) y no pude encontrar muchas diferencias entre los dos. Acabo de ejecutar los programas en callgrind y la única versión del encabezado parece haber sido insertada en muchas funciones, ya que no aparecen en el resultado de callgrinds. –
- 1. Cómo saber qué funciones NO estaban en línea
- 2. Funciones en línea
- 3. Funciones en línea en C++
- 4. C++ funciones en línea usando GCC - ¿por qué la LLAMADA?
- 5. Averiguar en qué número de línea se encuentra un elemento en dom en Javascript?
- 6. Un script bash corriendo se cuelga en alguna parte. ¿Puedo averiguar en qué línea está?
- 7. Averiguar qué compilador usa Maven
- 8. ¿Funciones en línea con enlace interno?
- 9. Error de enlace para funciones en línea
- 10. Funciones de una línea en C?
- 11. ¿Hay funciones en línea en Java?
- 12. Como hacer funciones en línea en C#
- 13. retorno por valor funciones en línea
- 14. Funciones escalares en línea: ¿real o vaporware?
- 15. funciones en línea todavía aparecen en el archivo .prof
- 16. Averiguar qué aplicación Gems Rails no utiliza
- 17. Averiguar qué caracteres admite una fuente
- 18. no puede averiguar qué =: = [A, B] significa
- 19. ¿Por qué prefijo nombres de funciones sql?
- 20. Averiguar qué excepciones un método puede lanzar en C#
- 21. Averiguar qué elemento de menú se activó en Qt
- 22. ¿Cómo puedo averiguar qué procedimiento arrojó una excepción en Delphi?
- 23. C funciones en línea y error "indefinido externo"
- 24. ¿Qué está en línea?
- 25. Herramienta para averiguar XPath
- 26. Java: averiguar * por qué * una clase está cargada
- 27. Comportamiento de las funciones en línea __LINE__ en
- 28. Eliminar elementos del DOM y volver a agregarlos donde estaban
- 29. Definición múltiple de funciones en línea al vincular bibliotecas estáticas
- 30. ¿Cómo averiguar qué algoritmo [cifrado] son compatibles con mi JVM?
Buena pregunta, pero estoy curioso en cuanto a sus motivos. – Daniel
Reestructurar el código moviendo una gran cantidad de código desde el encabezado a los archivos cpp y ahora se ejecuta más lento. Quiero ver si hay diferencia en el número de funciones en línea –
¿Cómo está construyendo? ¿Liberar o depurar? ¿Qué estás especificando para/OPT para Visual Studio? –