请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】
如果你想要统计 GCC 编译过程中各个阶段的时间,可以使用 GCC 的 -ftime-report
选项。这个选项可以让编译器在编译结束后报告每个编译阶段所花费的时间。要使用这个选项,你可以在编译命令中加入它,如下所示:
gcc -o myprogram myprogram.c -ftime-report
[02:19:31] (*^~^*) ~/sam$ gcc -o myprogram myprogram.c -ftime-report
Time variable usr sys wall GGC
phase setup : 0.00 ( 0%) 0.00 ( 0%) 0.00 ( 0%) 1298k ( 68%)
phase opt and generate : 0.00 ( 0%) 0.00 ( 0%) 0.01 (100%) 57k ( 3%)
initialize rtl : 0.00 ( 0%) 0.00 ( 0%) 0.01 (100%) 12k ( 1%)
TOTAL
这将编译 myprogram.c
并链接为可执行文件 myprogram
,同时在编译结束后输出一个报告,展示各个阶段(如解析、优化、代码生成等)所花费的时间。
请注意,-ftime-report
选项的输出是在编译过程完全结束之后才提供的,而且会输出到标准错误流(stderr),不是预处理器生成的警告信息。
另一个相关的 GCC 选项是 -Q
,它可以和 -ftime-report
结合使用,以输出更多关于编译器所做工作的信息,包括哪些编译器选项被启用了。
gcc -o myprogram myprogram.c -ftime-report -Q
[02:21:04] (*^~^*) ~/sam$ gcc -o myprogram myprogram.c -ftime-report -Q
main
Analyzing compilation unit
Performing interprocedural optimizations
<*free_lang_data> {heap 964k} <visibility> {heap 964k} <build_ssa_passes> {heap 964k} <opt_local_passes> {heap 964k} <remove_symbols> {heap 964k} <targetclone> {heap 964k} <free-fnsummary> {heap 964k}Streaming LTO
<whole-program> {heap 964k} <fnsummary> {heap 964k} <inline> {heap 964k} <modref> {heap 964k} <free-fnsummary> {heap 964k} <single-use> {heap 964k} <comdats> {heap 964k}Assembling functions:
<simdclone> {heap 964k} main
Time variable usr sys wall GGC
phase setup : 0.00 ( 0%) 0.00 ( 0%) 0.00 ( 0%) 1298k ( 68%)
phase parsing : 0.00 ( 0%) 0.00 ( 0%) 0.01 (100%) 531k ( 28%)
lexical analysis : 0.00 ( 0%) 0.00 ( 0%) 0.01 (100%) 0 ( 0%)
TOTAL : 0.00 0.00 0.01 1897k