最新GCC编译器选项及优化提示

合集下载

GCC编译器选项及优化提示

GCC编译器选项及优化提示

[原创]GCC编译器‎选项及优化提‎示很多弟兄可能‎都很关心如何‎优化编译自己‎的程序,虽然本人不赞‎成"骨灰"玩法,却也不得不承‎认这是掌握g‎c c的绝佳途‎径;因此献上此帖‎,以供各位玩家‎参考,绝对原创噢============================大多数程序和‎库在编译时默‎认的优化级别‎是"2"(使用gcc选‎项:"-O2")并且在I nt‎e l/AMD平台上‎默认按照i3‎86处理器来‎编译。

如果你只想让‎编译出来的程‎序运行在特定‎的平台上,就需要执行更‎高级的编译器‎优化选项,以产生只能运‎行于特定平台‎的代码。

一种方法是修‎改每个源码包‎中的M ake‎f ile文件‎,在其中寻找C‎F LAGS和‎C XXFLA‎G S变量(C和C++编译器的编译‎选项)并修改它的值‎。

一些源码包比‎如binut‎i ls, gcc, glibc等‎等,在每个子文件‎夹中都有M a‎k efile‎文件,这样修改起来‎就太累了!另一种简易做‎法是设置C F‎L AGS和C‎X XFLA G‎S环境变量。

大多数c on‎f igure‎脚本会使用这‎两个环境变量‎代替M ake‎f ile文件‎中的值。

但是少数c o‎n figur‎e脚本并不这‎样做,他们必须需要‎手动编辑才行‎。

为了设置C F‎L AGS和C‎X XFLA G‎S环境变量,你可以在ba‎s h中执行如‎下命令(也可以写进.bas hrc‎以成为默认值‎):export‎C FLA GS‎="-O3 -marc h=<c pu类型>" && C XXFLA‎G S=$CFLAGS‎这是一个确保‎能够在几乎所‎有平台上都能‎正常工作的最‎小设置。

"-marc h"选项表示为特‎定的c pu类‎型编译二进制‎代码(不能在更低级‎别的c pu上‎运行),I ntel通‎常是:pentiu‎m2, pentiu‎m3, pentiu‎m3m, pentiu‎m4, pentiu‎m4m, pentiu‎m-m, pres c o‎t t, noc ona‎说明:pentiu‎m3m/pentiu‎m4m是笔记‎本用的移动P‎3/P4;pentiu‎m-m是迅驰I/II代笔记本‎的c pu;pres c o‎t t是带SS‎E3的P4(以滚烫到可以‎煎鸡蛋而闻名‎);noc ona‎则是最新的带‎有E M T64‎(64位)的P4(同样可以煎鸡‎蛋)AMD通常是‎:k6, k6-2, k6-3, athlon‎, athlon‎-tbird, athlon‎-xp, athlon‎-mp, optero‎n, athlon‎64, athlon‎-fx用AMD的一‎般都是DI Y‎e r,就不必解释了‎吧。

C语言中的编译器优化标志有哪些?

C语言中的编译器优化标志有哪些?

C语言中的编译器优化标志有哪些?在 C 语言编程中,编译器优化标志是提升程序性能的重要工具。

它们能够让编译器以不同的方式处理代码,从而生成更高效的机器码。

接下来,让我们详细了解一下常见的编译器优化标志。

首先,“O1”是一个较为基础的优化级别。

它会执行一些常见的优化操作,比如常量折叠、简单的指令替换和消除一些不必要的代码。

常量折叠指的是在编译时直接计算那些在运行时不会改变的值,例如“5 +3”会在编译时直接计算为 8 。

简单的指令替换可能会将一些效率较低的指令替换为更高效的等价指令。

“O2”优化级别比“O1”更进一步。

除了包含“O1”的优化之外,还会进行更多的循环优化和函数内联。

循环优化可以减少循环中的开销,提高循环的执行效率。

函数内联则是将一些小的、被频繁调用的函数直接嵌入到调用它的地方,避免了函数调用的开销。

“O3”是更高级别的优化。

它在“O2”的基础上增加了一些更激进的优化策略,例如强度削减和自动向量化。

强度削减是指将一些复杂的运算转换为更简单但等价的运算,以提高执行速度。

自动向量化则是将一些可以并行执行的操作转换为向量指令,利用现代处理器的向量处理能力来提高性能。

除了上述常见的整体优化级别,还有一些特定的优化标志。

比如“fomitframepointer”,它会省略帧指针以节省空间和提高性能,但这可能会使调试变得更困难。

“funrollloops”标志会将小的循环展开,以减少循环控制的开销,但可能会导致代码体积增大。

“ftreevectorize”明确指示编译器尝试进行向量化优化。

“foptimizesiblingcalls”用于优化兄弟函数调用,以减少函数调用的开销。

“fmergeallconstants”会合并相同的常量,节省存储空间。

另外,不同的编译器可能还提供了一些特定的优化标志。

例如,GCC 编译器中的“fnostrictaliasing”用于控制严格别名规则,这在某些情况下可能会影响优化。

GCC编译选项参数

GCC编译选项参数

GCC编译选项参数1. -o,指定输出文件的名称。

例如,gcc -o output main.c将生成一个名为output的可执行文件。

2.-c,只编译源文件但不链接生成可执行文件。

这个选项可以用于分离编译,将源代码和编译后的目标文件分开存放。

3.-g,生成包含调试信息的可执行文件。

这个选项可用于在程序出错时进行调试。

4. -Wall,显示所有警告信息。

这个选项用于尽可能多地检测潜在的错误。

5. -Werror,将警告视为错误。

这个选项会将所有警告信息转化为编译错误,编译过程中如果遇到任何警告就会停止编译。

6. -std,指定所使用的C或C++的标准版本。

例如,-std=c99指定使用C99标准。

7.-I,指定额外的头文件路径。

可以通过多次使用该选项来指定多个路径。

8.-L,指定额外的库文件路径。

可以通过多次使用该选项来指定多个路径。

9. -l,指定要链接的库文件。

例如,-lmath将链接数学库。

10.-O,指定优化级别。

有多个优化级别可选,从-O0(不进行任何优化)到-O3(进行最高级别的优化)。

11.-D,定义预处理宏。

可以使用-D定义宏并为其指定值。

例如,-DDEBUG定义一个名为DEBUG的宏。

12.-U,取消预定义宏的定义。

可以使用-U取消已定义的宏。

13.-E,只进行预处理,生成预处理后的源代码。

可以通过这个选项将预处理后的代码输出到标准输出或另一个文件中。

14.-S,只进行编译,生成汇编代码。

可以通过这个选项将汇编代码输出到标准输出或另一个文件中。

15. -shared,生成共享库文件。

这个选项可以用于生成可供其他程序调用的动态链接库。

16.-fPIC,生成位置无关的代码。

这个选项可以用于在共享库中使用。

17. -pthread,为多线程程序链接额外的线程库。

18. -march,指定目标处理器的架构。

例如,-march=armv7指定目标处理器是ARMv7架构。

19. -mfpu,指定使用的浮点单元类型。

GCC常用编译命令选项

GCC常用编译命令选项

GCC常⽤编译命令选项假设源程序⽂件名为main.c1. ⽆选项编译链接⽤法: gcc main.c作⽤: main.c预处理、汇编、编译并链接形成可执⾏⽂件。

这⾥未指定输出⽂件,默认输出为a.out。

2. 选项 –o⽤法:gcc main.c -o main.out作⽤:将main.c预处理、汇编、编译并链接形成可执⾏⽂件main.out。

-o选项⽤来指定输出⽂件的⽂件名。

3. 选项 –E⽤法:gcc -E main.c -o main.i作⽤:将 main.c预处理输出 main.i⽂件。

4. 选项 –S⽤法:gcc -S main.i作⽤:将预处理输出⽂件main.i汇编成main.s⽂件。

5. 选项 –c⽤法:gcc -c main.s作⽤:将汇编输出⽂件main.s编译输出main.o⽂件。

6. ⽆选项链接⽤法:gcc main.o -o main.out作⽤:将编译输出⽂件main.o链接成最终可执⾏⽂件main.out。

7. 选项-O⽤法:gcc -O1 main.c -o main.out作⽤:使⽤编译优化级别1编译程序。

级别为1~3,级别越⼤优化效果越好,但编译时间越长。

8.运⾏可执⾏⽂件⽤法:>>./main.out输出结果9.查看动态可执⾏⽂件动态库加载情况⽤法:>>ldd main.exe静态库后缀名⼀般为“.a”动态库后缀名⼀般为“.so”10.反汇编⽤法:objdump -d main.out⼆. 多源⽂件的编译⽅法假设有两个源⽂件为main.c和test.c1、多个⽂件⼀起编译⽤法:gcc main.c test.c -o main.out作⽤:将main.c和test.c分别编译后链接成main.out可执⾏⽂件。

2、分别编译各个源⽂件,之后对编译后输出的⽬标⽂件链接。

⽤法:gcc -c main.c //将main.c编译成main.ogcc -c test.c //将test.c编译成test.ogcc -o main.o test.o -o main//将main.o和test.o链接成main3、如果要编译的⽂件都在同⼀个⽬录下,可以⽤通配符gcc *.c -o 来进⾏编译。

GCC(警告.优化以及调试选项)

GCC(警告.优化以及调试选项)

GCC(警告.优化以及调试选项)[介绍]gcc and g 分别是gnu的c & c 编译器gcc/g 在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件预处理器cpp2.将预处理后的文件不转换成汇编语言,生成文件.s编译器egcs3.有汇编变为目标代码(机器代码)生成.o的文件汇编器as4.连接目标代码,生成可执行程序连接器ld1.总体选项-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.例子用法:gcc -E hello.c > pianoapan.txtgcc -E hello.c | more慢慢看吧,一个hello word 也要与处理成800行的代码-S只激活预处理和编译,就是指把文件编译成为汇编代码。

例子用法gcc -S hello.c他将生成.s的汇编代码,你可以用文本编辑器察看-c只激活预处理,编译,和汇编,也就是他只把程序做成obj文件例子用法:gcc -c hello.c他将生成.o的obj文件2.目录选项-Idir在你是用#include'file'的时候,gcc/g 会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.对于#include,gcc/g 会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找-include file-i相当于“#include”包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include例子用法:gcc hello.c -include /root/pianopan.h-I-就是取消前一个参数的功能,所以一般在-Idir之后使用-idirafter dir在-I的目录里面查找失败,讲到这个目录里面查找.-iprefix prefix-iwithprefix dir一般一起使用,当-I的目录查找失败,会到prefix dir下查找-Ldir制定编译的时候,搜索库的路径。

GCC编译优化选项

GCC编译优化选项

GCC编译优化选项-march第⼀个重要的选项是-march。

这个选项告诉编译器该为你的处理器(或arch)⽣成何种代码,它告诉编译器只为特定类型的CPU⽣成代码。

不同的CPU具有不同的能⼒,⽀持不同的指令集,以及不同的执⾏代码⽅式。

-march标记指⽰编译器根据你CPU的能⼒、特征、指令集、怪癖等⽣成特定的代码。

即使/etc/make.conf中的CHOST变量指定了所使⽤的通⽤构架,-march还是可以⽤来为特定的处理器优化程序。

x86和x86-64(也包括其他的)的CPU尤其应该利⽤-march标记。

-O接下来是-O变量。

这个选项控制所有的优化等级。

使⽤优化选项会使编译过程耗费更多的时间,并且占⽤更多的内存,尤其是在提⾼优化等级的时候。

-O设置⼀共有五种:-O0、-O1、-O2、-O3和-Os。

你只能在/etc/make.conf⾥⾯设置其中的⼀种。

除了-O0以外,每⼀个-O设置都会多启⽤⼏个选项,请查阅gcc⼿册的章节,以便了解每个-O等级启⽤了哪些选项及它们有何作⽤。

让我们来逐⼀考察各个优化等级:-O0:这个等级(字母“O”后⾯跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。

这样就不会优化代码,这通常不是我们想要的。

-O1:这是最基本的优化等级。

编译器会在不花费太多编译时间的同时试图⽣成更快更⼩的代码。

这些优化是⾮常基础的,但⼀般这些任务肯定能顺利完成。

-O2:-O1的进阶。

这是推荐的优化等级,除⾮你有特殊的需求。

-O2会⽐-O1启⽤多⼀些标记。

设置了-O2后,编译器会试图提⾼代码性能⽽不会增⼤体积和⼤量占⽤的编译时间。

-O3:这是最⾼最危险的优化等级。

⽤这个选项会延长编译代码的时间,并且在使⽤gcc4.x的系统⾥不应全局启⽤。

⾃从3.x版本以来gcc的⾏为已经有了极⼤地改变。

在3.x,-O3⽣成的代码也只是⽐-O2快⼀点点⽽已,⽽gcc4.x中还未必更快。

gcc编译参数

gcc编译参数

gcc编译参数在GCC中,编译参数用于指定编译器的行为和选项。

这些参数可以对代码进行优化、生成调试信息、链接不同的库等等。

以下是一些常用的GCC编译参数:1.优化参数:--O0:不进行优化--O1:进行基本优化--O2:进行更多优化--O3:进行最大优化--Os:进行优化以缩小代码尺寸2.调试参数:--g:生成调试信息- -ggdb:生成GDB可用的调试信息- -gdwarf:生成DWARF调试信息3.警告参数:- -Wall:开启所有警告- -Werror:将所有警告视为错误- -Wextra:开启额外的警告- -Wno-unused-parameter:忽略未使用的函数参数的警告4.标准库参数:- -std=c89:使用C89标准- -std=c99:使用C99标准- -std=c11:使用C11标准- -std=c++98:使用C++98标准- -std=c++11:使用C++11标准- -std=c++14:使用C++14标准- -std=c++17:使用C++17标准5.预处理参数:- -D<symbol>=<value>:定义宏- -U<symbol>:取消宏定义- -I<dir>:指定头文件路径6.链接参数:- -L<dir>:指定库文件路径- -l<library>:链接库文件- -shared:生成共享库- -static:生成静态库7.其他参数:--c:只编译,不链接- -o <output>:指定输出文件名- -Wl,<option>:传递选项给链接器- -Wp,<option>:传递选项给预处理器这只是一小部分常用的GCC编译参数,GCC还提供了许多其他参数用于更精细地控制编译过程。

可以通过运行`gcc --help`命令查看GCC支持的所有编译参数。

GCC编译的一些选项

GCC编译的一些选项

(GCC)GCC编译的一些选项1. -c 编译产生对象文件(*.obj)而不链接成可执行文件,当编译几个独立的模块,而待以后由链接程序把它们链接在一起时,就可以使用这个选项,如:$cc -c hello.c ===> hello.o$cc hello.o2. -o 允许用户指定输出文件名,如$cc hello.c -o hello.oor$cc hello.c -o hello3. -g 指明编译程序在编译的输出中应产生调试信息.这个调试信息使源代码和变量名引用在调试程序中或者当程序异常退出后在分析core文件时可被使用.4. -D 允许从编译程序命令行定义宏符号一共有两种情况:一种是用-DMACRO,相当于在程序中使用#define MACRO,另一种是用-DMACRO=A,相当于程序中的#define MACRO A.如对下面这代码:#ifdefine DEBUGprintf("debug message\n");#endif编译时可加上-DDEBUG参数,执行程序则打印出编译信息5. -I 可指定查找include文件的其他位置.例如,如果有些include文件位于比较特殊的地方,比如/usr/local/include,就可以增加此选项如下:$cc -c -I/usr/local/include -I/opt/include hello.c 此时目录搜索会按给出的次序进行.6. -E 这个选项是相对标准的,它允许修改命令行以使编译程序把预先处理的C文件发到标准输出,而不实际编译代码.在查看C预处理伪指令和C宏时,这是很有用的.可能的编译输出可重新定向到一个文件,然后用编辑程序来分析:$cc -c -E hello.c >cpp.out 此命令使include文件和程序被预先处理并重定向到文件cpp.out.以后可以用编辑程序或者分页命令分析这个文件,并确定最终的C语言代码看起来如何.7. -O 优化选项, 这个选项不是标准的-O和-O1指定1级优化-O2 指定2级优化-O3 指定3级优化-O0指定不优化$cc -c O3 -O0 hello.c 当出现多个优化时,以最后一个为准!!8. -Wall 以最高级别使用GNU编译程序,专门用于显示警告用!!$gcc -Wall hello.c9. -L指定连接库的搜索目录,-l(小写L)指定连接库的名字$gcc main.o -L/usr/lib -lqt -o hello上面的命令把目标文件main.o与库qt相连接,连接时会到/usr/lib查找这个库文件.也就是说-L与-l一般要成对出现.**********************gcc/egcs 的主要选项*********gcc 命令的常用选项选项解释-ansi 只支持ANSI 标准的 C 语法。

gcc优化选项-O1-O2-O3-Os优先级

gcc优化选项-O1-O2-O3-Os优先级

gcc优化选项-O1-O2-O3-Os优先级少优化->多优化:O0 -->> O1 -->> O2 -->> O3-O0表⽰没有优化,-O1为缺省值,-O3优化级别最⾼英⽂解析:`-O '`-O1 'Optimize. Optimizing compilation takes somewhat more time, and alot more memory for a large function.With `-O ', the compiler tries to reduce code size and executiontime, without performing any optimizations that take a great dealof compilation time.`-O ' turns on the following optimization flags:-fdefer-pop-fdelayed-branch-fguess-branch-probability-fcprop-registers-floop-optimize-fif-conversion-fif-conversion2-ftree-ccp-ftree-dce-ftree-dominator-opts-ftree-dse-ftree-ter-ftree-lrs-ftree-sra-ftree-copyrename-ftree-fre-ftree-ch-funit-at-a-time-fmerge-constants`-O ' also turns on `-fomit-frame-pointer ' on machines where doingso does not interfere with debugging.`-O ' doesn 't turn on `-ftree-sra ' for the Ada compiler. Thisoption must be explicitly specified on the command line to beenabled for the Ada compiler.`-O2 'Optimize even more. GCC performs nearly all supportedoptimizations that do not involve a space-speed tradeoff. Thecompiler does not perform loop unrolling or function inlining whenyou specify `-O2 '. As compared to `-O ', this option increasesboth compilation time and the performance of the generated code.`-O2 ' turns on all optimization flags specified by `-O '. It alsoturns on the following optimization flags:-fthread-jumps-fcrossjumping-foptimize-sibling-calls-fcse-follow-jumps -fcse-skip-blocks-fgcse -fgcse-lm-fexpensive-optimizations-fstrength-reduce-frerun-cse-after-loop -frerun-loop-opt-fcaller-saves-fpeephole2-fschedule-insns -fschedule-insns2-fsched-interblock -fsched-spec-fregmove-fstrict-aliasing-fdelete-null-pointer-checks-freorder-blocks -freorder-functions-falign-functions -falign-jumps-falign-loops -falign-labels-ftree-vrp-ftree-prePlease note the warning under `-fgcse ' about invoking `-O2 ' onprograms that use computed gotos.`-O3 'Optimize yet more. `-O3 ' turns on all optimizations specified by`-O2 ' and also turns on the `-finline-functions ',`-funswitch-loops ' and `-fgcse-after-reload ' options.`-O0 'Do not optimize. This is the default.///==================另外还有个Os选项==========================原来-Os相当于-O2.5。

简述gcc命令的选项

简述gcc命令的选项

简述gcc命令的选项GCC是GNU Compiler Collection的缩写,是一款开源的编译器,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。

GCC命令的选项非常多,可以根据不同的需求进行选择,下面将对GCC命令的选项进行简述。

1. 常用选项(1)-c:只编译不链接,生成目标文件。

(2)-o:指定输出文件名。

(3)-g:生成调试信息。

(4)-Wall:开启所有警告信息。

(5)-Werror:将警告信息视为错误。

(6)-O:优化选项,包括-O0、-O1、-O2、-O3等级别。

(7)-I:指定头文件搜索路径。

(8)-L:指定库文件搜索路径。

(9)-l:指定链接的库文件名。

2. 预处理选项(1)-E:只进行预处理,输出预处理结果。

(2)-D:定义宏。

(3)-U:取消定义宏。

(4)-I:指定头文件搜索路径。

(5)-M:输出依赖关系。

3. 编译选项(1)-S:只编译不汇编,生成汇编代码。

(2)-fPIC:生成位置无关代码。

(3)-fno-strict-aliasing:关闭严格别名规则。

(4)-fno-omit-frame-pointer:不省略函数栈帧指针。

(5)-fno-common:禁止共享数据段。

(6)-fno-builtin:禁用内建函数。

(7)-fno-stack-protector:禁用栈保护。

4. 链接选项(1)-shared:生成共享库。

(2)-static:生成静态库。

(3)-nostdlib:不使用标准库。

(4)-nodefaultlibs:不使用默认库。

(5)-Wl:传递参数给链接器。

(6)-rpath:指定运行时库搜索路径。

5. 其他选项(1)-v:显示编译器版本信息。

(2)-dumpversion:显示编译器版本号。

(3)-dumpmachine:显示编译器目标机器。

(4)-print-search-dirs:显示搜索路径。

(5)-print-libgcc-file-name:显示libgcc文件路径。

如何利用编译器选项优化代码性能(九)

如何利用编译器选项优化代码性能(九)

代码的性能优化一直是开发者关注的重要话题。

而编译器选项作为一种可供利用的工具,可以帮助开发者对代码进行优化,提升程序的性能。

本文将会讨论如何利用编译器选项来优化代码性能,并介绍一些常见的编译器选项以及其作用。

一、选择合适的编译器选项选择合适的编译器选项是优化代码性能的第一步。

不同的编译器选项具有不同的作用,可以针对不同的代码进行优化。

下面是一些常见的编译器选项及其作用:1. -O0/-O1/-O2/-O3:这是GCC编译器提供的一系列优化级别选项。

-O0代表禁用所有优化,-O1代表基本优化,-O2代表常见的优化,-O3则代表更多的优化。

一般情况下,建议使用-O2级别的优化。

2. -march=native:这个选项可以让编译器根据当前的系统架构来进行优化。

对于不同的处理器架构,编译器可以针对性地生成更优化的机器指令。

3. -funroll-loops:这个选项可以让编译器执行循环展开优化,即将循环体中的代码展开成多次循环执行的代码。

这样可以减少循环的迭代次数,从而提高代码的执行速度。

4. -ftree-vectorize:对于合适的代码,这个选项可以让编译器进行向量化优化。

通过将多个数据操作合并成一个向量操作,可以提高代码的并行度,从而加快程序的执行速度。

二、针对性地优化代码除了选择合适的编译器选项外,开发者还可以针对性地优化代码,使其更适应编译器的优化。

下面是一些常见的针对性优化方法:1. 减少函数调用:函数调用会带来一定的开销,尤其是在循环中频繁调用的函数。

可以通过将函数的实现直接内联到调用位置来减少函数调用的开销。

2. 减少内存访问:内存访问是程序性能的瓶颈之一,可以通过减少对内存的频繁访问来提升代码性能。

例如,可以将循环中的数组访问拆分成多个独立的循环,以减少对内存的频繁访问。

3. 使用更高效的数据结构和算法:选择适合问题的数据结构和算法,可以大大提升代码的执行效率。

比如,使用哈希表代替线性查找,使用快速排序代替冒泡排序等。

如何通过调整编译器选项优化程序性能(一)

如何通过调整编译器选项优化程序性能(一)

优化程序性能一直是开发者非常关心的问题。

在编写代码时,选择合适的编译器选项可以显著改善程序的执行效率。

本文将探讨如何通过调整编译器选项来优化程序性能。

一、选择合适的编译器优化级别编译器通常提供多个优化级别选项,如-O1、-O2、-O3等,不同的级别对程序性能的优化程度也不同。

一般来说,较高的优化级别能够更充分地进行代码优化,但也会增加编译时间。

开发者可以根据具体需求选择合适的优化级别,权衡编译时间和程序性能。

二、启用循环展开循环展开是一种优化技术,可以将循环体内的代码重复执行多次,减少循环本身的开销。

在编译器选项中,一般可以使用- funroll-loops开启循环展开。

对于循环次数较少的循环,循环展开可以减少跳转指令的开销,提高程序的执行效率。

三、使用向量化指令现代处理器通常支持向量化指令,这些指令可以一次处理多个数据。

通过启用编译器选项,开发者可以将适合向量化的代码进行自动优化。

使用向量化指令可以提高程序的并行性,加速计算过程。

在GCC 编译器中,可以使用- ftree-vectorize选项开启向量化优化。

四、调整内存对齐内存对齐是指数据在内存中的存储方式。

合理调整内存对齐方式可以提高内存读取的效率。

在编译器选项中,可以使用- falign-loops=n选项来设置循环内存对齐的字节大小。

一般来说,较大的循环内存对齐会提高内存访问的性能,但也会占用更多的内存空间,开发者需要根据具体情况进行调优。

五、使用静态链接在编译器选项中,可以选择将库函数进行静态链接。

静态链接可以减少程序运行时的动态链接开销,提高程序的执行效率。

但同时也会增加可执行文件的大小。

开发者可以根据具体需求权衡使用动态链接还是静态链接。

六、启用编译器优化选项编译器通常提供一系列的优化选项,如循环展开、代码重排、函数内联等。

开发者可以根据具体情况启用相应的优化选项。

启用编译器优化选项可以让编译器更加智能地进行代码优化,改善程序性能。

GCC -o 优化选项说明

GCC -o 优化选项说明

GCC编译器优化选项分析及具体优化了什么收藏起因:目前项目使用nios IDE作为开发平台,其使用的编译器为gcc的交叉编译器。

在设定编译条件时,在debug模式下生成的程序正常,但是在release模式下会出现LCD显示的开端显示不全,缺少一个字节或字的状况。

为了了解具体为什么造成该问题,对两种模式下的配置做了对比,编译器皆为nios2-elf-gcc交叉编译器,debug模式编译器参数为:-DALT_DEBUG -O0 -g –Wall。

release模式编译器参数为: -DALT_RELEASE -O2 -g –Wall。

两种模式下的参数简单说明如下-DALT_DEBUG:目前没有明确资料显示该项的具体作用,根据命名可认为与调试有关选项。

且两种模式下都有,暂时认为不会造成差异。

-O0: gcc编译器默认优化等级。

-g:gdb调试器支持选项用于在编译时生成相关调试信息。

-Wall:打开所有编译器告警选项,即编译器最严格告警模式。

-O2:gcc编译高于O0低于O3的编译优化选项。

通过对比可以发现两种模式主要的不同在于编译器优化程度不同,那么编译器在两种优化下究竟做了什么优化那?是否由这些问题造成的显示丢失问题那??现在我们来看看gcc编译器的优化参数到底做了什么优化。

(注:由于关于nios2-elf-gcc的文档资料十分稀少,不能形成可分析的文档,所以以通用的gcc作为分析,毕竟同出一源)正文:GCC编译器优化选项介绍:GCC编译器在目前是不是用最多的编译器也相去不远,尤其在嵌入式领域很多编译器都是基于GCC的cross gcc版本。

毕竟功能成熟而且有开放的源代码。

这里只介绍优化编译的参数-O用来开启优化编译选项。

-O0:默认模式,不做任何优化。

-O1:优化。

该模式下对于一个大的函数或功能会花费更多的时间和内存。

在-O1下:编译会尝试减少代码体积和代码运行时间。

但是并不执行会花费大量时间的优化操作。

一GCC编译的详细参数以及动态库和静态库的制作

一GCC编译的详细参数以及动态库和静态库的制作

一GCC编译的详细参数以及动态库和静态库的制作GCC是一个开源的编程语言编译器套件,它支持多种编程语言,包括C、C++、Objective-C、Fortran、Java和Ada。

GCC提供了非常丰富的编译选项,可以根据编译的需要进行配置。

下面是一些常用的GCC编译选项:1.优化选项:--O0:不进行优化。

--O1:进行基本优化,可以提高代码运行速度。

--O2:进行更多的优化,会消耗更多的编译时间。

--O3:进行更深入的优化,可能会改变代码的行为。

2.调试选项:--g:生成调试信息,可以在调试器中使用。

- -ggdb:生成与GDB调试器兼容的调试信息。

- -gdwarf:生成与DWARF调试格式兼容的调试信息。

3.目标选项:- -march:指定生成的目标架构。

- -mtune:指定优化的目标处理器。

- -mlittle-endian:生成小端字节顺序的代码。

4.头文件和库文件选项:- -I <directory>:指定头文件路径。

- -L <directory>:指定库文件路径。

- -l <library>:链接指定的库文件。

动态库和静态库的制作涉及到将一组源代码文件编译成可执行代码的过程。

GCC提供了多个选项来控制动态库和静态库的制作。

静态库是一组目标文件的归档文件,可以通过GCC的ar命令创建。

下面是一些常用的选项:--c:编译源代码文件成为目标文件。

- ar rcs <library_name> <object_files>:将多个目标文件归档成一个静态库。

- -l <library_name>:链接指定的静态库。

动态库是一组在运行时加载的共享目标文件,可以通过GCC的共享链接器选项创建。

下面是一些常用的选项:--fPIC:产生与位置无关的代码。

- -shared:创建共享目标文件。

- -Wl,-soname,<library_name>:指定动态库的名称。

GCC编译选项参数

GCC编译选项参数

GCC编译选项参数GCC是一种开源的编译器套件,可用于编译多种编程语言,例如C、C++、Objective-C、Fortran等。

GCC提供了许多编译选项参数,以便开发人员根据需要自定义编译过程。

以下是一些常用的GCC编译选项参数。

1. -o filename:指定输出文件的名称,例如gcc -o myprogram.c。

2.-c:仅编译源文件,生成相应的目标文件,而不进行链接操作。

3.-E:仅进行预处理,输出预处理后的源代码。

4.-S:仅进行编译,生成汇编语言代码。

5.-g:生成调试信息,以便在调试程序时使用调试器。

6. -O[level]:优化编译,提高程序执行效率。

级别有-O0(关闭优化)、-O1(开启基本优化)、-O2(开启更多优化)、-O3(开启所有优化)等。

7. -Wall:输出所有警告信息。

8. -Werror:将所有警告信息视为错误,编译过程中出现警告将中断编译。

9. -std=标准:指定使用的语言标准,例如-std=c9910. -I directory:指定头文件的路径,可以使用多个-I选项来指定多个路径。

11. -L directory:指定库文件的路径,可以使用多个-L选项来指定多个路径。

12. -l library:链接指定的库文件,例如-lm表示链接数学库。

13. -D macro:定义一个宏,可以使用-D选项定义多个宏。

14. -U macro:取消一个宏的定义。

15. -pedantic:严格按照标准执行,当代码使用了标准不允许的特性时给出警告。

16. -Werror-implicit-function-declaration:函数未声明时,将其视为错误。

17. -Wno-unused-variable:忽略未使用的变量警告。

18.-fPIC:生成位置无关代码,用于生成共享库。

19. -march=architecture:指定目标架构,例如-march=native表示使用当前机器的最佳指令集扩展。

【GCC】gcc警告选项汇总--编辑中gcc编译选项

【GCC】gcc警告选项汇总--编辑中gcc编译选项

【GCC】gcc警告选项汇总--编辑中gcc编译选项⽬录参考原⽂:https:///qq_17308321/article/details/79979514前⾔警告:不是错误的,但是有风险或表明可能有错误。

英⽂原⽂:请求或取消警告选项加上-Wall吧,gcc 默认不加参数的情况下连定义了返回值的函数没有返回值都不报错。

-Wall,-Wextra 就是加-Wall 和-Wall不启动的选项也加上()-fsyntax-only检查代码中的语法错误,但除此之外不要做任何事情。

-w (⼩写)禁⽌所有警告消息。

-W (⼤写)以“ -W ”请求特定的警告 - 可以隐式地请求隐式声明的警告。

-W和-Wall的区别-Wall选项意思是编译后显⽰所有警告。

-W选项类似-Wall,会显⽰警告,但是只显⽰编译器认为会出现错误的警告。

在编译⼀些项⽬的时候可以-W和-Wall选项⼀起使⽤。

gcc -W -Wall test_w_wall testwwall.c-Werror=将指定的警告转换为错误。

请注意,指定-Werror = foo会⾃动隐含-W foo 。

但是, -Wno-error = foo并不意味着什么。

反过来:-Wno-error取消编译选项-Werror⽤途:假设我们使⽤了⼀个⼈的代码A⽬录,⾥⾯有⼀个-Werror的选项,把所有的警告当做错误;⼜使⽤了另⼀个⼈的代码B⽬录,⾥⾯存在⼀堆Warning。

这样,当我们把它们合在⼀起编译的时候,A中的-Werror选项会导致B的代码编译不过。

但我们⼜不想去修改B的代码,怎么办?⽅法是,先add_subdirectory(A),之后,加上⼀句set(CMAK_CXX_FLAGS "${CMAK_CXX_FLAGS} -Wno-error")-Wno-这个前缀,就是⽤来取消⼀个编译选项的然后,再add_subdirectory(B)-Wfatal-errors在发⽣第⼀个错误时中⽌编译。

警惕arm-linux-gcc编译器优化选项

警惕arm-linux-gcc编译器优化选项

警惕arm-linux-gcc编译器优化选项arm-linux-gcc的优化选项例如(-O2),可以加速我们的程序,使程序执⾏效率更⾼。

但是,倘若我们就是需要程序慢⼀点运⾏,但是优化却把我们的延时函数优化的没有了的时候,这种优化却不是我们想要的。

有时候,我们需要事物差的⼀⾯。

下边的代码是我的main.c程序。

#define GPBCON (*(volatile unsigned long *)0x56000010)#define GPBDAT (*(volatile unsigned long *)0x56000014)#define GPB5_out (1<<(5*2))#define GPB6_out (1<<(6*2))#define GPB7_out (1<<(7*2))#define GPB8_out (1<<(8*2))void wait(unsigned long dly){for(; dly > 0; dly--);}int main(void){unsigned long i = 0;GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out; // 将LED1-4对应的GPB5/6/7/8四个引脚设为输出while(1){wait(30000);GPBDAT = (~(i<<5)); // 根据i的值,点亮LED1-4if(++i == 16){i = 0;}}return0;} 这部分程序使⽤优化选项(-O2)编译的,编译后的汇编程序如下所⽰。

0000001c <wait>:1c: e12fff1e bx lr00000020 <main>:20: e92d4010 stmdb sp!, {r4, lr}24: e3a03b55 mov r3, #87040; 0x1540028: e3a04456 mov r4, #1442840576; 0x560000002c: e59f0060 ldr r0, [pc, #96] ; 94 <.text+0x94>30: e5843010 str r3, [r4, #16]34: ebfffff8 bl 1c <wait>38: e3e03000 mvn r3, #0; 0x03c: e59f0050 ldr r0, [pc, #80] ; 94 <.text+0x94>40: e5843014 str r3, [r4, #20]44: ebfffff4 bl 1c <wait>48: e3e03020 mvn r3, #32; 0x204c: e5843014 str r3, [r4, #20]50: e59f003c ldr r0, [pc, #60] ; 94 <.text+0x94>54: ebfffff0 bl 1c <wait>58: e3e03040 mvn r3, #64; 0x405c: e3a01003 mov r1, #3; 0x360: e5843014 str r3, [r4, #20]64: e1a04001 mov r4, r168: e59f0024 ldr r0, [pc, #36] ; 94 <.text+0x94>6c: ebffffea bl 1c <wait>70: e2841001 add r1, r4, #1; 0x174: e1a03284 mov r3, r4, lsl #578: e1e03003 mvn r3, r37c: e3a02456 mov r2, #1442840576; 0x5600000080: e3510010 cmp r1, #16; 0x1084: e5823014 str r3, [r2, #20]88: e3a04000 mov r4, #0; 0x08c: 1afffff4 bne 64 <main+0x44>90: eafffff4 b 68 <main+0x48>94: 00007530 andeq r7, r0, r0, lsr r5 可以看到,我们的延时函数完全被优化的没有了,那么我们的延时函数还有什么⽤。

最新GCC编译器选项及优化提示

最新GCC编译器选项及优化提示

G C C编译器选项及优化提示GCC编译器选项及优化提示GCC编译器选项及优化提示2010-08-01 19:41很多弟兄可能都很关心如何优化编译自己的程序,虽然本人不赞成"骨灰"玩法,却也不得不承认这是掌握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="&&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,就不必解释了吧。

如何利用编译器选项优化代码性能(六)

如何利用编译器选项优化代码性能(六)

如何利用编译器选项优化代码性能一、引言在现代的软件开发中,优化代码性能是一个重要的环节。

通过合理地使用编译器选项,我们可以最大限度地提高代码的执行效率和性能。

本文将探讨如何利用编译器选项来优化代码性能,以帮助开发人员编写更高效的程序。

二、选择正确的编译器选项选择正确的编译器选项是优化代码性能的第一步。

不同的编译器可能有不同的选项可供选择,因此我们需要仔细了解和理解编译器的文档,以便正确地配置选项。

通常来说,编译器选项涉及到优化级别、代码生成选项、优化算法等方面。

举个例子,GCC编译器的-O选项可以指定代码的优化级别,从-O0(没有优化)到-O3(高级优化),开发人员可以根据需求选择合适的优化级别。

三、打开优化选项在编译代码时,我们应该始终打开优化选项。

这些选项可以根据具体的编译器进行配置。

例如,在GCC编译器中,我们可以使用“-O”选项来开启常规优化。

这些优化选项可以帮助编译器识别和消除不必要的指令、减少代码体积、优化循环和条件等。

通过打开优化选项,我们可以有效地提高代码的执行效率和性能。

四、启用内联优化内联是一种常见的优化手段,它可以减少函数调用的开销,提高程序的执行速度。

在大部分情况下,编译器会自动地进行内联优化。

但是,我们也可以通过设置编译器选项来手动控制内联优化。

例如,在GCC编译器中,可以使用“-finline-functions”选项来开启内联优化。

使用这一选项可以将一些简单的函数在调用处直接展开,从而减少函数调用的开销,提高程序的性能。

五、使用特定架构的优化选项不同的计算机架构可能有不同的优化选项。

因此,我们需要根据目标架构选择合适的优化选项。

例如,在使用GCC编译器时,我们可以使用“-march”选项来指定目标架构。

通过选择合适的目标架构,我们可以利用架构优化指令集的特性,进一步提高代码的性能。

六、调整优化级别代码的优化级别也是影响性能的重要因素。

通过调整优化级别,我们可以在执行效率和生成代码大小之间进行平衡。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

G C C编译器选项及优化提示GCC编译器选项及优化提示GCC编译器选项及优化提示2010-08-01 19:41很多弟兄可能都很关心如何优化编译自己的程序,虽然本人不赞成"骨灰"玩法,却也不得不承认这是掌握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="&&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的功能又关闭函数内嵌功能。

更多的优化选项请参见:所有GCC选项完整列表参见:有两个页面值的参考:(对于gentoo-1.4)比较安全的优化选项(对于gentoo-1.4)进阶优化选项*哦,忘了说一声,"-O2"已经启用绝大多数安全的优化选项了,所以其实你不必对那一堆选项发愁。

先说说"-O3"在"-O2"基础上增加的几项,你可以按需添加(还算比较安全):[gcc-3.4.4]-finline-functions允许编译器选择某些简单的函数在其被调用处展开-fweb为每个web结构体分配一个伪寄存器-frename-registers试图驱除代码中的假依赖关系,这个选项对具有大量寄存器的机器很有效。

[gcc-4.0.2]-finline-functions说明如上-funswitch-loops将循环体中不改变值的变量移动到循环体之外-fgcse-after-reload*不太明白它的含义*[哪位大峡知道给小弟讲解一下,先行谢过说完"-O3"再说说在嵌入式系统上常用的"-Os"选项,这个选项其实也很重要,它的含义是对生成的二进制代码进行尺寸上的优化,它打开了所有"-O2"打开的选项,因此通常认为的"-Os"生成的二进制代码执行效率低的潜在意识是错误的!当然该选项与"-O2"的不同之处在于它在"-O2"的基础上禁止了所有为了对齐而插入的空间,也就是将所有"-falign-*"系列的选项禁用了。

这种禁用究竟是否一定降低了代码的执行效率,依据程序的不同而不同,据说某些情况下"-Os"的效率比"-O3"还要高14%!请兄弟们在实践中自己摸索吧.---下面选择我认为比较重要的几项简单介绍一下[gcc-3.4.4],GCC选项完整列表太长了!精力有限。

[注意]这里列出的都是非默认的选项,你只需要添加你所需要的选项即可-w禁止输出警告消息-Werror将所有警告转换为错误-Wall显示所有的警告消息-v显示编译程序的当前版本号-V指定gcc将要运行的版本。

只有在安装了多个版本gcc的机器上才有效。

-ansi按照ANSI标准编译程序,但并不限制与标准并不冲突的GNU扩展(一般不用该选项)-pedantic如果要限制代码必须严格符合ISO标准,就在"-ansi"的基础上同时启用这个选项(很少使用)-std=指定C语言的标准(c89,c99,gnu89),该选项禁止了GNU C的扩展关键字asm,typeof,inline(一般不用该选项)-static连接器将忽略动态连接库,同时通过将静态目标文件直接包含到结果目标文件完成对所有引用的解析。

-shared连接器将生成共享目标代码,该共享库可在运行时动态连接到程序形成完整的可执行体。

如果使用gcc命令创建共享库作为其输出,该选项可以防止连接器将缺失main()方法视为错误。

为了可以正确的工作,应该一致的使用选项"-fpic"以及目标平台选项编译构成同一个库的所有共享目标模块。

-shared-libgcc该选项指定使用共享版本的libgcc,在没有共享版本的libgcc的机器上该选项无效。

-specs=gcc驱动程序读取该文件以确定哪些选项应该传递给那些子进程。

该选项可以通过指定配置文件来覆盖默认配置,指定的文件将在默认配置文件读取后进行处理以修改默认配置。

-pipe使用管道而不是临时文件一个阶段到另一个阶段交换输出的方式,可以加快编译速度。

建议使用。

-o指定输出文件,对各种输出皆有效。

由于只能指定一个文件,所以在产生多个输出文件的情况下不要使用该选项。

--help显示gcc的命令行选项列表;与"-v"一起使用时还将显示gcc调用的各个进程所接受的选项。

--target-help显示目标机器相关的命令行选项列表-b指示需要编译程序的目标机器;默认为编译程序所运行的目标机编译代码。

目标机通过指定包含编译程序的目录来确定,通常为/usr/local/lib/gcc-lib//-B指定库文件的位置,包括编译程序的文件、执行程序和数据文件,如果需要运行子程序(如cpp,as,ld)就会用该前缀来定位。

这个前缀可以是用冒号分割的多个路径,环境变量GCC_EXEC_PREFIX和这个选项有相同的效果。

-I指定搜索系统头文件的目录,可以重复使用多个该选项指定多个目录。

-dumpmachine显示该程序的目标机名字,不做其他任何动作-dumpspecs显示构件编译程序的规范信息,包括用来编译、汇编和连接gcc编译程序自身用到的所有选项,不做其他任何动作。

-dumpversion显示编译程序自身的版本号,不做其他任何动作-falign-functions=N将所有函数的起始地址在N(N=1,2,4,8,16.)的边界上对齐,默认为机器自身的默认值,指定为1表示禁止对齐。

-falign-jumps=N将分支目标在N(N=1,2,4,8,16.)的边界上对齐,默认为机器自身的默认值,指定为1表示禁止对齐。

-fno-align-labels建议使用它,以保证不和-falign-jumps("-O2"默认启用的选项)冲突-fno-align-loops建议使用它,以确保不会在分支目标前插入多余的空指令。

-fbranch-probabilities在使用"-fprofile-arcs"选项编译程序并执行它来创建包含每个代码块执行次数的文件之后,程序可以利用这一选项再次编译,文件中所产生的信息将被用来优化那些经常发生的分支代码。

如果没有这些信息,gcc将猜测那一分支可能经常发生并进行优化。

这类优化信息将会存放在一个以源文件为名字的并以".da"为后缀的文件中。

-fno-guess-branch-probability默认情况下gcc将使用随机模型进行猜测哪个分支更可能被经常执行,并以此来优化代码,该选项关闭它。

-fprofile-arcs在使用这一选项编译程序并运行它以创建包含每个代码块的执行次数的文件后,程序可以再次使用"-fbranch-probabilities"编译,文件中的信息可以用来优化那些经常选取的分支。

如果没有这些信息,gcc将猜测哪个分支将被经常运行以进行优化。

这类优化信息将会存放在一个以源文件为名字的并以".da"为后缀的文件中。

-fforce-addr必须将地址复制到寄存器中才能对他们进行运算。

由于所需地址通常在前面已经加载到寄存器中了,所以这个选项可以改进代码。

-fforce-mem必须将数值复制到寄存器中才能对他们进行运算。

由于所需数值通常在前面已经加载到寄存器中了,所以这个选项可以改进代码。

相关文档
最新文档