GCC编译器选项与优化提示.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[原创]GCC编译器选项及优化提示 很多弟兄可能都很关心如何优化编译自己的程序,虽然本人不赞成骨灰玩法,却也不得不承认这是掌握gcc的绝佳途径; 因此献上此帖,以供各位玩家参考,绝对原创噢 ============================ 大多数程序和库在编译时默认的优化级别是2(使用gcc选项:-O2)并且在Intel/AMD平台上默认按照i386处理器来编译。 如果你只想让编译出来的程序运行在特定的平台上,就需要执行更高级的编译器优化选项,以产生只能运行于特定平台的代码。 一种方法是修改每个源码包中的Makefile文件,在其中寻找CFLAGS和CXXFLAGS变量(C和C++编译器的编译选项)并修改它的值。 一些源码包比如binutils, gcc, glibc等等,在每个子文件夹中都有Makefile文件,这样修改起来就太累了! 另一种简易做法是设置CFLAGS和CXXFLAGS环境变量。大多数configure脚本会使用这两个环境变量代替Makefile文件中的值。 但是少数configure脚本并不这样做,他们必须需要手动编辑才行。 为了设置CFLAGS和CXXFLAGS环境变量,你可以在bash中执行如下命令(也可以写进.bashrc以成为默认值): export CFLAGS=-O3 -march=cpu类型 CXXFLAGS=$CFLAGS 这是一个确保能够在几乎所有平台上都能正常工作的最小设置。 -march选项表示为特定的cpu类型编译二进制代码(不能在更低级别的cpu上运行), Intel通常是:pentium2, pentium3, pentium3m, pentium4, pentium4m, pentium-m, prescott, nocona 说明:pentium3m/pentium4m是笔记本用的移动P3/P4;pentium-m是迅驰I/II代笔记本的cpu; prescott是带SSE3的P4(以滚烫到可以煎鸡蛋而闻名);nocona则是最新的带有EMT64(64位)的P4(同样可以煎鸡蛋) AMD通常是:k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, opteron, athlon64, athlon-fx 用AMD的一般都是DIYer,就不必解释了吧。 如果编译时没有抱怨segmentation fault, core dumped,那么你设定的-O优化参数一般就没什么问题。 否则请降低优化级别(-O3 - -O2 - -O1 - 取消)。 个人意见:服务器使用-O2就可以了,它是最安全的优化参数(集合);桌面可以使用-O3 ; 不鼓励使用过多的自定义优化选项,其实他们之间没什么明显的速度差异(有时-O3反而更慢)。 编译器对硬件非常敏感,特别是在使用较高的优化级别的时候,一丁点的内存错误都可能导致致命的失败。 所以在编译时请千万不要超频你的电脑(我编译关键程序时总是先降频然的)。 注意:选项的顺序很重要,如果有两个选项互相冲突,则以后一个为准。 比如-O3将打开-finline-functions选项,但是可以用-O3 -fno-inline-functions既使用-O3的功能又关闭函数内嵌功能。 更多的优化选项请参见: /onlinedocs/gcc-3....e-Options.html /onlinedocs/gcc-3....4-Options.html /onlinedocs/gcc-4....e-Options.html /onlinedocs/gcc-4....4-Options.html 所有GCC选项完整列表参见: /onlinedocs/gcc-3....n-Summary.html /onlinedocs/gcc-4....n-Summary.html 有两个页面值的参考: (对于gentoo-1.4)比较安全的优化选项 /gentoo/gc...flag_gcc3.html (对于gentoo-1.4)进阶优化选项 /gentoo/gc...g_gcc3opt.html ******************************************************************* 哦,忘了说一声,-O2已经启用绝大多数安全的优化选项了,所以其实你不必对那一堆选项发愁。 先说说-O3在-O2基础上增加的几项,你可以按需添加(还算比较安全): [gcc-3.4.4] -finline-functions 允许编译器选择某些简单的函数在其被调用处展开 -fweb 为每个web结构体分配一个伪寄存器 -frename-registe

文档评论(0)

xuefei111 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档