Makefile及GCC编选项培训.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Makefile及GCC编选项培训

-glevel 要求产生调试信息,并使用level来限度信息的多少。缺省的level为2。 level为1生成最少量的信息,足以回溯到没有计划调试的程序部分。其中包括函数说明和外部变量,但没有局部变量信息与行号。 level为3包含额外信息,如程序中出现的所有宏定义,有些调试器在使用“-g3”开关后支持宏扩展。 -Q 使编译器打印出编译的每一个函数名,并在编译结束后打印每一遍的若干统计信息。 -save-temps 把通常的临时中间文件永久保存起来,放置在当前目录下,并根据源文件名进行命名。这样,用开关-c -save-temps编译foo.c会生成文件foo.i、foo.s以及foo.o。 Makefile及GCC编译选项培训 控制优化的开关 -O/O1 优化。优化编译会花更长的时间,对大的函数需要更多的内存。 不使用-O开关,编译器的目标是减少编译开销,进行调试以产生期望的结果。语句是独立的:如果在语句间用断点暂停程序,你可以给任意变量重新赋值,或把程序计数器改到函数的其它语句,最后得到的结果与源代码产生的结果还是一样的。 不使用“-O”开关,编译器只把声明为“register”的变量分配到寄存器。这样编译的目标代码比PCC不使用“-O”开关编译产生的代码还差一些。 使用-O开关,编译器力图减少代码大小和运行时间。 在使用-O开关后,编译器在所有机器上打开-fthread-jumps和-fdefer-pop开关。在有延迟时隙的机器上,编译器打开-fdelayed-branch开关,在支持调试的机器上即使没有帧指针也打开-fomit-frame-pointer开关。在某些机器上编译器还会打开其它的开关。 Makefile及GCC编译选项培训 -O2 进一步优化。GNU CC进行几乎所有支持的优化,但不进行空间速度平衡。编译器在使用-O2开关时不进行循环展开或函数内嵌。与开关-O相比,这一开关既增加了编译时间,又提高了生成代码的性能。 -O2开关打开了除循环展开或函数内嵌之外的所有优化开关。也在所有机器上打开-fforce-mem开关,在不干扰调试的机器上消除帧指针。 -O3 更进一步优化。-O3开关打开所有-O2开关指定的优化项,并打开inline-functions开关。 -O0 不进行优化。 -Os 为大小进行优化。-Os开关打开所有-O2开关指定的不显著增加代码大小的优化项,同时还进行针对减少代码量的进一步优化。 Makefile及GCC编译选项培训 -fforce-mem 强迫内存操作数在进行算术运算前拷贝到寄存器中。这可以通过使所有内存参考成为潜在的通用子表达式而产生更好的代码。在它们不是通用子表达式时,指令组合可以消除寄存器负载的分隔。-O2开关打开这一开关。 -fforce-addr 强迫内存地址常量在进行算术运算前拷贝到寄存器中。这同 “-fforce-mem”开关类似会产生更好的代码。 -fno-inline 忽略关键词“inline”。一般用此开关禁止编译器把函数扩展为内嵌函数。注意:如果不使用优化,函数不会被扩展为内嵌函数。 -finline-functions 把所有简单的函数集成到它们的调用者里。编译器试探性地决定哪个函数简单到可以采用此法集成。 -fkeep-inline-functions 即使对一个指定函数的所有调用都被集成,而且此函数被声明为static,仍然产生独立的该函数运行时可调用版本。 Makefile及GCC编译选项培训 后面的开关控制特别的优化方式。-O2开关会打开其中除了-funroll-loops和-funroll-all-loops之外的所有开关。在大多数机器上,-O开关会打开-fthread-jumps和-fdelayed-branch开关,但不同的机器对此的处理方法不同。 在期望进行“fine-tuning”优化时很少使用以下开关。 -fstrength-reduce 进行减少循环强度和消除叠代变量的优化。 -fthread-jumps 检查是否找到一个跳转的分支,其目的地所在的另一个比较已经被第一个比较包括在内,对此进行优化。如果找到,则依据条件是否已知为真或假,将第一个分支重定向到第二个分支的目的地,或紧跟其后的一点。 -fcse-follow-jumps 在通常消除子表达式的过程中,扫描跳转指令中无法由其它路径到达的跳转目标。例如,当CSE遇到一个带有else从句的if语句,CSE会按测试条件为假进行跳转。 Makefile及GCC编译选项培训 -fcse-skip-blo

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档