GCC 3
不同的酶切位点

ApaI (类型:Type II restriction enzyme )识别序列:5'GGGCC^C 3' BamHI(类型:Type II restriction enzyme )识别序列:5' G^GATCC 3' BglII (类型:Type II restriction enzyme )识别序列:5' A^GATCT 3' EcoRI (类型:Type II restriction enzyme )识别序列:5' G^AATTC 3' HindIII (类型:Type II restriction enzyme )识别序列:5' A^AGCTT 3' KpnI (类型:Type II restriction enzyme )识别序列:5' GGTAC^C 3' NcoI (类型:Type II restriction enzyme )识别序列:5' C^CATGG 3' NdeI (类型:Type II restriction enzyme )识别序列:5' CA^TATG 3' NheI (类型:Type II restriction enzyme )识别序列:5' G^CTAGC 3' NotI (类型:Type II restriction enzyme )识别序列:5' GC^GGCCGC 3' SacI (类型:Type II restriction enzyme )识别序列:5' GAGCT^C 3' SalI (类型:Type II restriction enzyme )识别序列:5' G^TCGAC 3' SphI (类型:Type II restriction enzyme )识别序列:5' GCATG^C 3' XbaI (类型:Type II restriction enzyme )识别序列:5' T^CTAGA 3' XhoI (类型:Type II restriction enzyme )识别序列:5' C^TCGAG 3'Trx-tag硫氧还蛋白标签是个融合标签,有利于蛋白可溶性表达。
gcc命令的参数

gcc命令的参数一、介绍GCC(GNU Compiler Collection)是一套广泛使用的编译器工具集,用于编译C、C++、Objective-C、Fortran等多种程序语言。
GCC命令的参数是指在使用GCC编译器时可以添加的选项和参数,通过这些参数可以对编译过程进行控制和定制,以满足不同的需求。
本文将详细介绍GCC命令的参数及其使用方法。
二、常用参数1. -o <file>指定输出文件的名称。
例如,gcc main.c -o main将编译main.c文件并输出可执行文件main。
2. -c只进行编译,不进行链接。
使用该参数可以将源代码编译为目标文件(.o文件),而不生成可执行文件。
3. -E只进行预处理,生成预处理后的代码。
该参数可用于查看预处理后的代码,以便调试和分析。
4. -g生成调试信息。
使用该参数可以在编译过程中生成调试信息,以便在调试程序时进行源代码级别的调试。
5. -Wall打开所有警告信息。
使用该参数可以让编译器输出所有可能的警告信息,帮助开发者发现潜在的问题。
6. -O优化选项。
GCC提供了多个优化选项,例如-O1、-O2、-O3等,可以根据需求选择不同级别的优化。
7. -I <dir>添加头文件搜索路径。
使用该参数可以告诉编译器在指定的目录中搜索头文件。
添加库文件搜索路径。
使用该参数可以告诉编译器在指定的目录中搜索库文件。
9. -l <library>链接指定的库文件。
使用该参数可以告诉编译器链接指定的库文件,例如-lm表示链接数学库。
10. -D <macro>定义宏。
使用该参数可以在编译过程中定义宏,以控制源代码中的条件编译。
三、高级参数1. -Werror将警告视为错误。
使用该参数可以将编译过程中的警告信息视为错误,编译过程将被中断。
2. -std=<standard>指定所使用的语言标准。
GCC支持多个语言标准,例如-std=c11表示使用C11标准。
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是一款常用的编译器,它具有许多参数可以用于编译和链接程序。
本文将介绍一些常用的GCC参数及其作用。
1. -o:指定输出文件名使用-o参数可以指定编译生成的可执行文件的名称。
例如,gcc -o myprogram myprogram.c将编译myprogram.c文件,并将生成的可执行文件命名为myprogram。
2. -c:仅编译不链接使用-c参数可以告诉GCC只进行编译,而不进行链接操作。
这对于大型项目的增量编译非常有用,可以节省编译时间。
3. -g:生成调试信息使用-g参数可以在可执行文件中生成调试信息,以便在调试程序时跟踪变量和代码的执行。
这对于定位程序中的错误非常有帮助。
4. -Wall:启用所有警告使用-Wall参数可以启用GCC的所有警告信息,帮助开发者发现潜在的问题和错误。
这有助于提高代码的质量和可靠性。
5. -std:指定使用的C/C++标准使用-std参数可以指定使用的C/C++标准版本。
例如,-std=c99表示使用C99标准进行编译,-std=c++11表示使用C++11标准进行编译。
6. -I:指定头文件搜索路径使用-I参数可以指定GCC搜索头文件的路径。
例如,-I/usr/include将告诉GCC在/usr/include目录中查找头文件。
7. -L:指定库文件搜索路径使用-L参数可以指定GCC搜索库文件的路径。
例如,-L/usr/lib 将告诉GCC在/usr/lib目录中查找库文件。
8. -l:链接指定的库文件使用-l参数可以告诉GCC链接指定的库文件。
例如,-lmath将链接数学库。
GCC会自动在标准库路径中查找该库文件。
9. -O:优化级别使用-O参数可以指定GCC的优化级别。
级别从-O0到-O3,级别越高,优化效果越明显,但编译时间也会相应增加。
10. -D:定义宏使用-D参数可以定义编译时的宏。
例如,-DDEBUG将定义一个名为DEBUG的宏,可以在代码中使用#ifdef DEBUG来判断是否启用调试代码。
GCC快速入门(三)——GCC调试和优化技巧

p : 告 诉 GCC 序 里 加 gi  ̄项 程 2 应 用 实 例 . 下 面 通过 一 个 具 体 的实 例 说 明 如 何 利 用 调 试 符 号 来 分 析 错 误 ,所 用 程 序 d b g e u me C如 下 .
入 额 外 的 代 码 ,执 行 时 ,产 生 g r f 的剖 析 信 息 ,以 显示 程 po用 序 的耗 时 情 况 。
G C调试和优化 技巧 C
■ 曾 江 华
G C调 试 常 用 选 项 C
GCC支 持 数 种 调 试 和 剖 析 选 项 , 这 些 选 项里 经 常 会用 到 的 在
是 一g和 P g选 项 。
一
惟 一 的 办法 就是 添 加 大量 的语 句 来产 生 特 定 的输 出 。 GDB的 出 现 减 轻 了 开 发 人 员 的 负 担 ,他 们 可 以在 程 序 运 行 的 时 候 单 步 跟 踪 自 己 的 代 码 ,或 者 通 过 断 点 暂 时 中 止 程 序 的 执 行 ,还 能 够 随 时 察 看 变 量 和 内 存 的 当 前 状 态 ,并 监 视 关 键 的数 据结 构 是如 何 影响 代 码 运行的。 GDB提 供 了 下 列 功 能 : ◆监 视 程 序 中变 量 的值 t ◆设 置 断 点 ,使 程序 在 指 定 的代 码 行上 停 止 执 行 t ◆ 可 以一 行 行地 执 行 代 码 t ◆ 动 态 地 改 变 程 序 的 执 行 环境 。
行 编译 ,同时 产 生调 试符 号 :
# gc -g e  ̄ T e. -0 c d b n C
d b q e e  ̄ n
使 用 G B调 试 程 序 D
1G . DB基 础 G C C 组 件 包 含 了 一 个 叫
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支持的所有编译参数。
Win10安装gcc、g++、make

Win10安装gcc、g++、make点击下载 mingw-get-setup.exe安装 mingw-get-setup.exe直接默认安装就好了,如果不想安装在C盘,修改的安装路径最好不要有空格(我⾃⼰的安装路径有空格好像也没遇到什么问题)安装完之后将MinGW\bin路径添加到系统环境变量⾥:此电脑->右键“属性”->⾼级系统设置->⾼级->环境变量->系统环境变量下找到“Path”,双击新建->把MinGW\bin的路径复制进去->然后⼀路点“确定”退出安装Package:⽅法⼀(推荐):1. Win+R 打开运⾏,输⼊cmd回车2. 安装gcc:输⼊ mingw32-get install gcc 回车3. 安装g++:输⼊ mingw32-get install g++ 回车4. 安装gdb:输⼊ mingw32-get install gdb 回车5. 安装make:输⼊ mingw32-get install mingw32-make 回车⽅法⼆:1. Win+R 打开运⾏,输⼊cmd回车2. 输⼊ mingw32-get 回车3. 显⽰如下界⾯(如果出错的话,应该是环境变量没配好,要重新配置⼀下):4. 选择你想要安装的Package,点击前⾯的选择框,点击 Mark for Installation,都选择好后,点击左上⾓的 Installation,点击 Apply Changes 就可以了。
不知道安装哪些Package的,⽂章最后有说明。
测试⼀下是否安装成功:在cmd⾥输⼊:gcc -v、g++ -v、mingw32-make -v,如果出现如下信息,就说明安装成功了。
如果你每次make的时候不想输 mingw32-make 这么长, 可以到 MinGW\bin 下把 mingw32-make.exe 重命名为 make.exe 就⾏了。
简述gcc命令的选项

简述gcc命令的选项gcc命令是一个常用的编译器命令,用于编译和链接C、C++等程序。
它有许多选项可以用来控制编译过程中的行为。
本文将简要介绍gcc 命令的一些常用选项。
1. -c选项:该选项用于编译源文件,生成目标文件,但不进行链接。
例如,gcc -c test.c会将test.c编译为test.o。
2. -o选项:该选项用于指定生成的可执行文件的名称。
例如,gcc -o test test.c会将test.c编译为名为test的可执行文件。
3. -g选项:该选项用于在生成的可执行文件中包含调试信息,以便于调试程序。
例如,gcc -g test.c会生成一个包含调试信息的可执行文件。
4. -Wall选项:该选项用于打开所有警告信息。
例如,gcc -Wall test.c会显示所有的警告信息。
5. -I选项:该选项用于指定头文件的搜索路径。
例如,gcc -I/usr/include test.c会在/usr/include目录中搜索头文件。
6. -L选项:该选项用于指定库文件的搜索路径。
例如,gcc -L/usr/lib test.c会在/usr/lib目录中搜索库文件。
7. -l选项:该选项用于指定需要链接的库文件。
例如,gcc -lmylib test.c会将名为libmylib.so或libmylib.a的库文件链接到可执行文件中。
8. -D选项:该选项用于定义预处理器宏。
例如,gcc -DDEBUG test.c 会定义一个名为DEBUG的宏。
9. -E选项:该选项用于只进行预处理,并将结果输出到标准输出。
例如,gcc -E test.c会将test.c进行预处理,并将结果输出到屏幕上。
10. -S选项:该选项用于只进行编译,并将结果输出为汇编代码。
例如,gcc -S test.c会将test.c编译为test.s。
11. -O选项:该选项用于指定优化级别。
例如,gcc -O2 test.c会进行优化级别为2的优化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[ GCC 1 || GCC 2 || GCC 3 || GCC 4 || GCC 5 ]GCC 3Section: GNU Tools (1)Updated: 2003/12/05调试选项(DEBUGGING OPTION)GNU CC拥有许多特别选项,既可以调试用户的程序,也可以对GCC排错:-g以操作系统的本地格式(stabs, COFF, XCOFF,或DWARF).产生调试信息. GDB能够使用这些调试信息.在大多数使用stabs格式的系统上, `-g'选项启动只有GDB才使用的额外调试信息;这些信息使GDB 调试效果更好,但是有可能导致其他调试器崩溃,或拒绝读入程序.如果你确定要控制是否生成额外的信息, 使用`-gstabs+', `-gstabs',`-gxcoff+', `-gxcoff', `-gdwarf+',或`-gdwarf' (见下文).和大多数C编译器不同, GNU CC允许结合使用`-g'和`-O'选项.优化的代码偶尔制造一些惊异的结果:某些声明过的变量根本不存在;控制流程直接跑到没有预料到的地方;某些语句因为计算结果是常量或已经确定而没有执行;某些语句在其他地方执行,因为他们被移到循环外面了.然而它证明了调试优化的输出是可能的.对可能含有错误的程序使用优化器是合理的.如果GNU CC支持输出多种调试信息,下面的选项则非常有用.-ggdb以本地格式(如果支持)输出调试信息,尽可能包括GDB扩展.-gstabs以stabs格式(如果支持)输出调试信息,不包括GDB扩展.这是大多数BSD系统上DBX 使用的格式.-gstabs+以stabs格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使用这些扩展有可能导致其他调试器崩溃或拒绝读入程序.-gcoff以COFF格式(如果支持)输出调试信息.这是在System V第四版以前的大多数System V系统上SDB使用的格式.-gxcoff以XCOFF格式(如果支持)输出调试信息.这是IBM RS/6000系统上DBX调试器使用的格式.-gxcoff+以XCOFF格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使用这些扩展有可能导致其他调试器崩溃或拒绝读入程序.-gdwarf以DWARF格式(如果支持)输出调试信息.这是大多数System V第四版系统上SDB使用的格式.-gdwarf+以DWARF格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使用这些扩展有可能导致其他调试器崩溃或拒绝读入程序.-g level-ggdb level-gstabs level-gcoff level-gxcoff level-gdwarf level请求生成调试信息,同时用level指出需要多少信息.默认的level值是2.Level 1输出最少量的信息,仅够在不打算调试的程序段内backtrace.包括函数和外部变量的描述,但是没有局部变量和行号信息.Level 3包含更多的信息,如程序中出现的所有宏定义.当使用`-g3'选项的时候,某些调试器支持宏扩展.-p产生额外代码,用于输出profile信息,供分析程序prof使用.-pg产生额外代码,用于输出profile信息,供分析程序gprof使用.-a产生额外代码,用于输出基本块(basic block)的profile信息,它记录各个基本块的执行次数,供诸如tcov此类的程序分析.但是注意,这个数据格式并非tcov期待的.最终GNU gprof将处理这些数据.-ax产生额外代码,用于从'bb.in'文件读取基本块的profile参数,把profile的结果写到'bb.out' 文件. `bb.in'包含一张函数列表.一旦进入列表中的某个函数,profile操作就开始,离开最外层的函数后, profile操作就结束.以`-'为前缀名的函数排除在profile操作之外.如果函数名不是唯一的,它可以写成`/path/filename.d:functionname'来澄清. `bb.out'将列出一些有效的文件名.这四个函数名具有特殊含义: `__bb_jumps__'导致跳转(jump)频率写进`bb.out'. `__bb_trace__'导致基本块序列通过管道传到`gzip',输出`bbtrace.gz'文件. `__bb_hidecall__'导致从跟踪(trace)中排除call 指令.`__bb_showret__'导致在跟踪中包括返回指令.-d letters编译的时候,在letters指定的时刻做调试转储(dump).用于调试编译器.大多数转储的文件名通过源文件名添加字词获得(例如`foo.c.rtl'或`foo.c.jump').-dM预处理结束的时候转储所有的宏定义,不输出到文件.-dN预处理结束的时候转储所有的宏名.-dD预处理结束的时候转储所有的宏定义,同时进行正常输出.-dy语法分析(parse)的时候在标准错误转储调试信息.-drRTL阶段后转储到`file.rtl'.-dx仅对函数生成RTL,而不是编译.通常和`r'联用.-dj第一次跳转优化后转储到`file.jump'.-dsCSE (包括有时候跟在CSE后面的跳转优化)后转储到`file.cse'.-dL循环优化后转储到`file.loop'.-dt第二次CSE处理(包括有时候跟在CSE后面的跳转优化)后转储到`file.cse2'. -df流程分析(flow analysis)后转储到`file.flow'.-dc指令组合(instruction combination)后转储到`bine'.-dS第一次指令安排(instruction schedule)后转储到`file.sched'.-dl局部寄存器分配后转储到`file.lreg'.-dg全局寄存器分配后转储到`file.greg'.-dR第二次指令安排(instruction schedule)后转储到`file.sched2'.-dJ最后一次跳转优化后转储到`file.jump2'.-dd推迟分支调度(delayed branch scheduling)后转储到`file.dbr'.-dk寄存器-堆栈转换后转储到`file.stack'.-da产生以上所有的转储.-dm运行结束后,在标准错误显示内存使用统计.-dp在汇编输出加注指明使用了哪些模式(pattern)及其替代模式.-fpretend-float交叉编译的时候,假定目标机和宿主机使用同样的浮点格式.它导致输出错误的浮点常数,但是在目标机上运行的时候, 真实的指令序列有可能和GNU CC希望的一样.-save-temps保存那些通常是``临时''的中间文件;置于当前目录下,并且根据源文件命名.因此,用`-c -save-temps'选项编译`foo.c '会生成` foo.cpp'和`foo.s' 以及`foo.o'文件.-print-file-name=library显示库文件library的全路径名,连接时会使用这个库---其他什么事情都不作.根据这个选项, GNU CC既不编译,也不连接,仅仅显示文件名.-print-libgcc-file-name和`-print-file-name=libgcc.a'一样.-print-prog-name=program类似于`-print-file-name',但是查找程序program如`cpp'.优化选项(OPTIMIZATION OPTION)这些选项控制多种优化措施:-O-O1优化.对于大函数,优化编译占用稍微多的时间和相当大的内存.不使用`-O'选项时,编译器的目标是减少编译的开销,使编译结果能够调试.语句是独立的:如果在两条语句之间用断点中止程序,你可以对任何变量重新赋值,或者在函数体内把程序计数器指到其他语句,以及从源程序中精确地获取你期待的结果.不使用`-O'选项时,只有声明了register的变量才分配使用寄存器.编译结果比不用`-O'选项的PCC要略逊一筹.使用了`-O'选项,编译器会试图减少目标码的大小和执行时间.如果指定了`-O'选项, `-fthread-jumps'和`-fdefer-pop'选项将被打开.在有delay slot的机器上, `-fdelayed-branch'选项将被打开.在即使没有帧指针(frame pointer)也支持调试的机器上, `-fomit-frame-pointer'选项将被打开.某些机器上还可能会打开其他选项.-O2多优化一些.除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作.例如不进行循环展开(loop unrolling)和函数内嵌(inlining).和-O选项比较,这个选项既增加了编译时间,也提高了生成代码的运行效果.-O3优化的更多.除了打开-O2所做的一切,它还打开了-finline-functions选项.-O0不优化.如果指定了多个-O选项,不管带不带数字,最后一个选项才是生效的选项.诸如`-f flag'此类的选项描述一些机器无关的开关.大多数开关具有肯定和否定两种格式; `-ffoo'开关选项的否定格式应该是`-fno-foo'.下面的列表只展示了一种格式---那个不是默认选项的格式.你可以通过去掉或添加`no-'构造出另一种格式.-ffloat-store不要在寄存器中存放浮点变量.这样可以防止某些机器上不希望的过高精度,如68000的浮点寄存器(来自68881)保存的精度超过了double应该具有的精度.对于大多数程序,过高精度只有好处.但是有些程序严格依赖于IEEE浮点数的定义.对这样的程序可以使用`-ffloat-store'选项.-fmemoize-lookups-fsave-memoized使用探索法(heuristic)进行更快的编译(仅对C++).默认情况下不使用探索法.由于探索法只对某些输入文件有效,其他程序的编译速度会变得更慢.第一次编译器必须对成员函数(或对成员数据的引用)建立一个调用.它必须(1)判断出这个类是否实现了那个名字的成员函数; (2)决定调用哪个成员函数(涉及到推测需要做哪种类型转换); (3)检查成员函数对调用者是否可见.所有这些构成更慢的编译.一般情形,第二次对成员函数(或对成员数据的引用)建立的调用,必须再次经过相同长度的处理.这意味着象这样的代码cout << "This " << p << " has " << n << " legs.\n";对整个三步骤要做六次遍历.通过使用软件缓存, ``命中''能够显著地减少这种代价.然而不幸的是,使用这种缓存必须实现其他机制,带来了它自己的开销.`-fmemoize-lookups'选项打开软件缓存.因为函数的正文环境不同,函数对成员和成员函数的访问权(可见性)也可能不同, g++可能需要刷新缓存. 使用`-fmemoize-lookups'选项,每编译完一个函数就刷新缓存.而`-fsave-memoized'选项也启用同样的缓存,但是当编译器发觉最后编译的函数的正文环境产生的访问权和下一个待编译的函数相同,编译器就保留缓存内容.这对某个类定义许多成员函数时非常有用:除了某些其他类的友函数,每个成员函数拥有和其他成员函数完全一样的访问权,因而无需刷新缓存.-fno-default-inline默认为不要把成员函数内嵌,因为它们定义在类的作用域内(仅C++).-fno-defer-pop一旦函数返回,参数就立即弹出.对于那些调用函数后必须弹出参数的机器,编译器一般情况下让几次函数调用的参数堆积在栈上,然后一次全部弹出.-fforce-mem做数学运算前把将要使用的内存操作数送入寄存器.通过把内存访问转换成潜在的公共子表达式,它可能产生较好的目标码. 如果它们不是公共子表达式,指令组合应该消除各自的寄存器载荷.我乐意倾听不同意见.-fforce-addr做数学运算前把将要使用的内存地址常数送入寄存器.它可能和`-fforce-mem'一样产生较好的目标码.我乐意倾听不同意见.-fomit-frame-pointer对于不需要帧指针(frame pointer)的函数,不要在寄存器中保存帧指针.这样能够避免保存,设置和恢复帧指针的指令;同时对许多函数提供一个额外的寄存器. 但是在大多数机器上将无法调试.某些机器上,如Vax,这个选项无效,因为标准调用序列自动处理帧指针,通过假装不存在而不保存任何东西.机器描述宏FRAME_POINTER_REQUIRED控制目标机是否支持这个选项.-finline-functions把所有简单的函数集成进调用者.编译器探索式地决定哪些函数足够简单,值得这种集成.如果集成了所有给定函数的调用,而且函数声明为static,那么一般说来GCC有权不按汇编代码输出函数.-fcaller-saves允许在寄存器里分配数值,但是这个方案通常受到各个函数调用的冲击,因此GCC生成额外的代码,在函数调用的前后保存和复原寄存器内容.仅当生成代码看上去优于反之结果时才实现这样的分配.某些机器上该选项默认为允许,通常这些机器没有调用保护寄存器代替使用.-fkeep-inline-functions即使集成了某个函数的所有调用,而且该函数声明为static,仍然输出这个函数一个独立的,运行时可调用的版本.-fno-function-cse不要把函数地址存入寄存器;让调用固定函数的指令显式给出函数地址.这个选项产生效率较低的目标码,但是如果不用这个选项,某些不寻常的hack,改变汇编器的输出,可能因优化而带来困惑.-fno-peephole禁止任何机器相关的peephole优化.-ffast-math这个选项出于速度优化,允许GCC违反某些ANSI或IEEE规则/规格.例如,它允许编译器假设sqrt函数的参数是非负数.这个选项不被任何`-O'选项打开,因为对于严格依靠IEEE或ANSI规则/规格实现的数学函数,程序可能会产生错误的结果.下列选项控制特定的优化. `-O2'选项打开下面的大多数优化项,除了`-funroll-loops'和`-funroll-all-loops'项.而`-O'选项通常打开`-fthread-jumps'和`-fdelayed-branch' 优化项,但是特定的机器上的默认优化项有可能改变.如果特别情况下非常需要``微调''优化,你可以使用下面的选项.-fstrength-reduce执行循环强度缩小(loop strength reduction)优化,并且消除重复变量.-fthread-jumps执行优化的地点是,如果某个跳转分支的目的地存在另一个条件比较,而且该条件比较包含在前一个比较语句之内,那么执行优化.根据条件是true或者false,前面那条分支重定向到第二条分支的目的地或者紧跟在第二条分支后面.-funroll-loops执行循环展开(loop unrolling)优化.仅对循环次数能够在编译时或运行时确定的循环实行.-funroll-all-loops执行循环展开(loop unrolling)优化.对所有循环实行.通常使程序运行的更慢.-fcse-follow-jumps在公共子表达式消元(common subexpression elimination)的时候,如果没有其他路径到达某个跳转的目的地,就扫过这条jump指令.例如,如果CSE遇到带有else 从句的if语句,当条件测试为false时, CSE就跟在jump后面.-fcse-skip-blocks它类似于`-fcse-follow-jumps'选项,但是CSE跟在条件跳转后面,条件跳转跳过了语句块(block).如果CSE遇到一条简单的if语句,不带else从句,`-fcse-skip-blocks'选项将导致CSE跟在if产生的跳转后面.-frerun-cse-after-loop执行循环优化后,重新进行公共子表达式消元.-felide-constructors如果看上去合理就省略构造子(仅C++).根据这个选项,对于下面的代码, GNU C++直接从调用foo初始化y,而无需通过临时变量:A foo (); A y = foo ();如果没有这个选项, GNU C++首先通过调用类型A 合适的构造子初始化y;然后把foo 的结果赋给临时变量;最后,用临时变量替换`y'的初始值.ANSI C++标准草案规定了默认行为(`-fno-elide-constructors').如果程序的构造子存在副效应, `-felide-constructors'选项能够使程序有不同的表现,因为可能忽略一些构造子的调用.-fexpensive-optimizations执行一些相对开销较大的次要优化.-fdelayed-branch如果对目标机支持这个功能,它试图重新排列指令,以便利用延迟分支(delayedbranch)指令后面的指令空隙.-fschedule-insns如果对目标机支持这个功能,它试图重新排列指令,以便消除因数据未绪造成的执行停顿.这可以帮助浮点运算或内存访问较慢的机器调取指令,允许其他指令先执行,直到调取指令或浮点运算完成.-fschedule-insns2类似于`-fschedule-insns'选项,但是在寄存器分配完成后,需要一个额外的指令调度过程.对于寄存器数目相对较少,而且取内存指令大于一个周期的机器,这个选项特别有用.目标机选项(TARGET OPTION)缺省情况下, GNU CC编译出本机类型的目标码.然而也可以把他安装成交叉编译器, 为其他机型编译程序.事实上,针对不同的目标机,可以同时安装GNU CC相应的配置.然后用`-b'选项指定目标机种.顺便提一下,新版本和旧版本的GNU CC可以共存.其中一个版本(可能是最新的那个)为缺省版本,但是有时候你希望使用其他版本.-b machine参数machine指出编译的目标机种.这个选项用于安装为交叉编译器的GNU CC.参数machine的值和配置GNU CC交叉编译器时设置的机器类型一样.例如,如果交叉编译器配置有`configure i386v',意思是编译80386上的System V目标码,那么你可以通过`-b i386v'运行交叉编译器.如果没有指定`-b'选项,通常指编译本机目标码.-V version参数version指出运行哪个版本的GNU CC.这个选项用于安装了多个版本的GCC.例如,如果version是`2.0',意味着运行GNU CC 2.0版.如果没有指定`-V'选项,缺省版本取决于GNU CC的安装方式,一般说来推荐使用通用版本.。