Quando si compila C++ con GCC 4.4 o MSVC è possibile far sì che il compilatore emetta dei messaggi quando una funzione è in linea?Scopri quali funzioni sono state allineate
risposta
Con g ++, non credo che si può fare g ++ rapporto che, ma è possibile esaminare il file binario risultante con qualsiasi strumento che mostra i simboli, nm
per esempio:
#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
(nessuna uscita da nm nel secondo caso)
MODIFICA: Inoltre, i profiler possono essere utili. gprof mostra, su questi due esempi:
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, a seconda di come vengono utilizzate le funzioni, il compilatore può incorporare alcune istanze e non altri. Se il programma è sufficientemente grande, sarebbe necessario qualcosa di più sofisticato. – Cogwheel
Infatti. Mi chiedo se qualche profiler abbia riportato qualcosa del genere (gprof non sembra). Potrebbe essere un piccolo strumento utile da scrivere. – Cubbi
Grazie. Riesco a vedere le differenze nei binari compilati. La versione solo dell'intestazione sembra avere più funzioni inline. Ho eseguito gprof prima (compilato con -pg) e non potevo avere molte differenze tra i due. Ho appena eseguito i programmi su callgrind e la sola versione dell'intestazione sembra avere un numero elevato di funzioni in quanto non vengono visualizzate nell'output di callgrinds. –
- 1. Scopri quali funzioni utilizzano CPU intensamente
- 2. Debug del browser: come vedere quali funzioni javascript sono state chiamate dopo qualche azione?
- 3. Le funzioni asincrone possono essere allineate?
- 4. Le funzioni JSTL non sono state trovate in JSF
- 5. PostgreSQL come vedere quali query sono state eseguite
- 6. Quali app commerciali/reali sono state scritte usando PhoneGap?
- 7. ffmpeg: quali funzioni sono multithreading sicure?
- 8. Scopri quali flag stiamo creando con Setup.hs
- 9. Come scoprire quali funzioni NON erano in linea
- 10. Scopri che funzioni ha una libreria C statica
- 11. Quante righe sono state cancellate?
- 12. will_paginate scopri se sono sull'ultima pagina
- 13. Scopri se sono sul thread di unità
- 14. Quali sono le buone euristiche per le funzioni di inlining?
- 15. Voglio sapere quali funzioni sono disponibili da un Win32.DLL
- 16. Quali sono i parametri "res" e "req" nelle funzioni Express?
- 17. Quali sono le "nuove funzioni hash" nell'hash cuckoo?
- 18. Quali sono alcuni usi interessanti delle funzioni di ordine superiore?
- 19. Quali funzioni di espressioni regolari sono supportate da Solr edismax?
- 20. Quali sono le differenze tra funzioni e metodi in Swift?
- 21. Quali sono i limiti delle funzioni multi curl di PHP?
- 22. Quali sono gli usi delle funzioni virtuali pure in C++?
- 23. JavaScript State State Machine
- 24. Scopri quali risorse non stanno andando oltre HTTPS
- 25. Le variabili stack sono allineate con GCC __attribute __ ((aligned (x)))?
- 26. Scopri quali stili CSS vengono utilizzati su una determinata pagina
- 27. Scopri quali variabili d'ambiente usate da un comando
- 28. sessioni PHP che sono già state iniziate
- 29. Web Api Sono state trovate più azioni
- 30. Colonne allineate di output
Buona domanda ma io sono curioso di sapere le vostre motivazioni. – Daniel
Ho ri-strutturato il codice spostando un sacco di codice dall'intestazione ai file cpp e ora viene eseguito più lentamente. Voglio vedere se c'è una differenza nel numero di funzioni inlining –
Come stai costruendo? Rilascio o debug? Cosa stai specificando per/OPT per Visual Studio? –