首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GCC编译优化选项

GCC编译优化选项 参考GCC文档 http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html....查看GCC各选项打开的优化项:gcc -Q --help=optimizers。...分为如下: O0: 默认选项,目的: 减少编译时间;生成可调试代码(可打断) O/O1: 做一些不显著增加编译时间的优化 O2: 显著提升编译时间,提升代码性能,做不包含`space-speed tradeoff...Os: 优化性能同时不增加可执行文件大小。包含O2选项中不增加代码大小的优化项 Og: 优化性能同时不损害可调试性。包含O1选项中不损害可调试性的优化项 Ofast: 忽视严格的标准编译性。...-foptimize-strlen ---- 优化标准C strlen函数实现 -fpartial-inlining ---- 内联函数的某些部分 -fpeephole2 ---- 特定机型的优化 -

7.6K51

GCC编译选项_需要使用安全编译选项语言

1、gcc包含的c/c++编译器gcc,cc,c++,g++ gcc和cc是一样的,c++和g++是一样的。...一般c程序就用gcc编译c++程序就用g++编译   2、gcc的基本用法 gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为...现在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个xxxx-config --libs --cflags,比如编译一个gtk程序:gcc gtktest.c...6、-O参数 这是一个程序优化参数,一般用-O2就是,用来优化程序用的,比如gcc test.c -O2,优化得到的程序比没优化的要小,执行速度可能也有所提高(我没有测试过)。   ...CC:用来指定c编译器。 CXX:用来指定cxx编译器。 LIBS:跟上面的–libs作用差不多。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

编译选项含义

编译选项: 现在我们Makefile中的编译选项有: -g :可执行程序包含调试信息;(给gdb调试使用) -O2:该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外 还会采用几乎所有目标配置支持的优化算法...也就是增加相应的优化编译选项,具体看下面的相应链接; https://www.zhihu.com/question/27090458 -fpic:用于生成位置无关代码。...-L 搜索相应库文件路径,.是指当前路径; -march=armv7-a -march=armv7-a是指编译出来的汇编语言是针对armv7架构的; -mtune=contex-a8 与上面一样,这个则是针对板子上的...使用实际的硬件浮点运算单元会比软浮点快得多; -mthumb-interwork 这个编译选项则是支持编译出来的汇编语言可以支持ARM和THUMB指令集; -mno-thumb-interwork 缺省情况下是...-fno-inline 忽略代码中的inline关键字,该选项使编译器将内联函数以普通函数正常对待,等同于无优化选项的处理。

2.6K60

C语言编译过程

如果用一张图来表示: image.png 编译编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序...C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件 1.编译预处理 读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理 [...如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,},+,-,*,\,等等。...经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。 4.汇编过程 汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。...对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。 目标文件由段组成。

1.9K20

叙述 C语言编译

@(C语言)[code] 用一段简单的代码,探讨下从C代码到最终可执行文件的编译过程,追根究底。 偶尔了解下底层,也就没那么多莫名其妙了。...工作原因有时候会用python写写测试工具,感受到其快速实现应用的便利,但由于偏底层开发,主力语言依然是C。对于开发语言没有什么优劣概念,在特定的情景下哪种实现更佳就用哪种,工具合适才是最好的。...个人开发环境 ubuntu 14.04 ---- 编译的作用 相比python,lua等脚本语言解释执行方式,编译C是为了提高程序的运行效率。...把对用户友好的语言文本编译成对机器友好的特定指令直接执行,而不是执行时一条一条通过解释器解析执行,很大地提高了执行的效率。对应C主要用于底层,系统层次,追求高性能表现,亦或者,平台资源限制。...#ifndef _XXX__XXX #define _XXX_XXX #endif 编译(Compiling) 这一环节,是把C代码转换为汇编代码并根据需求进行一定程度的优化处理。

1.7K10

C语言编译过程

处理条件预编译 #if, #ifdef, #if, #elif,#endif 处理“#include”预编译指令,将包含的“.h”文件插入对应位置。这可是递归进行的,文件内可能包含其他“.h”文件。...保留#pragma编译器指令。(1)设定编译器状态,(2)指示编译器完成一些特定的动作。...代表接下来的文本应该被当做包含一个隐式的extern "C编译 1.高级语言->汇编代码 命令 gcc -S a.i -o a.s .file "a.c" .globl _...链接 使用到了C标准库的东西“printf”,但是编译过程只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,将翻译成的二进制与需要用到库绑定在一块。...-fPIC file1.c -c //这一步生成file1.o gcc -shared file1.o -o libtest.so

1.8K20

C语言笔记】C语言编译的过程

下面以windows环境下的test.c为例,test.c里的代码为: #include int main(void) { printf("This is a test program...2、预处理(Preprpcessing) 使用预处理器把源文件test.c经过预处理生成test.i文件,预处理用于将所有的#include头文件以及宏定义替换成其真正的内容。...预处理的命令为: gcc -E test.c -o test.i 上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-o是指定输出文件名。 预处理之后得到的仍然是文本文件。...3、编译(Compilation) 使用编译器将预处理文件test.i编译成汇编文件test.s。...汇编过程的命令为: gcc -c test.s -o test.o 上述命令中-c、-o让汇编器把汇编文件test.s转换成目标文件test.o。

12.1K30

C语言系列】C语言编译流程分析

前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。...\n”); return 0; } 通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out 其实编译(包括链接)的命令:gcc hello.c 可分解为如下4...编译(Compilation) 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。...gcc其实是后台程序的一些包装,根据不同参数去调用其他的实际处理程序,比如:预编译编译程序cc1、汇编器as、连接器ld 可以看到编译后的汇编代码(hello.s)如下: .file "hello.c...helloworld的大体编译和链接过程就是这样了,那么编译器和链接器到底做了什么呢? 编译过程可分为6步:扫描(词法分析)、语法分析、语义分析、源代码优化、代码生成、目标代码优化

10.8K50

干货:嵌入式C语言源代码优化方案(非编译优化

需要特别指出的是,编译器在提取公共子表达式前不能按照代数的等价关系重新安排表达式。这时,程序员要手动地提出公共的子表达式(在VC.NET里有一项“全局优化选项可以完成此工作,但效果就不得而知了)。...const float t(1.0f / c); e = a * t; f = b * t; 4、结构体成员的布局 很多编译器有“使结构体字,双字或四字对齐”的选项。...+ temp->dog; 一些老的C语言编译器不做聚合优化,而符合ANSI规范的新的编译器可以自动完成这个优化,看例子: float a, b, c, d, f, g; 。。。...这样可能会影响某些编译器的优化——比如,自动内联。 9、采用递归 与LISP之类的语言不同,C语言一开始就病态地喜欢用重复代码循环,许多C程序员都是除非算法要求,坚决不用递归。...C语言编译器们总是先假定每一个函数的变量都是内部变量,这是由它的机制决定的,在这种情况下,它们的优化完成得最好。

1.5K10

c语言编译

c语言编译器是一款涵盖丰富学习资料的软件,用户可以在线一键学习辅导c语言编译器在线,可以满足用户的学习需求,能够为用户带来优质的服务,随时都可以在软件上学习各种有趣编程知识。   ...软件特色   1、资源丰富   用户可以在软件上找到丰富的C语言教程,能够看到很多不同的编程资源,轻松地去学习;   2、不断更新   软件上的素材资源会不断地更新,可以让用户轻松地学习,能够在线学习到很多实用知识...;   3、满足需求   软件可以满足用户的学习需求,通过软件就可以直接去软件中学习,能学到自己没学过的;   4、功能完善   用户可以在线编译自己需要的编译的代码,支持编译多种不同的编程语言,让学习更方便...软件优势   - 编译迅速,软件的编译速度非常迅速,能够直接将编译完成的代码放在眼前,轻松查看;   - 智能联想c语言编译器在线,拥有联想功能,可以帮助用户快速地输入常用语句,不输完整也会有完整词;...  - 没有广告,使用软件的时候不会出现广告,能够轻松地使用,在软件上自由地编译学习。

2.1K10

C语言——Q编译和链接

在 gcc 环境下想观察⼀下,对 test.c ⽂件预处理后的.i⽂件,命令如下: gcc -E test.c -o test.i 预处理阶段主要处理那些源⽂件中#开始的预编译指令。...2、编译 编译过程就是将预处理后的⽂件进⾏⼀系列的:词法分析、语法分析、语义分析及优化,⽣成相应的汇编代码⽂件。...就是根据汇编指令和机器指令的对照表⼀⼀的进⾏翻译,也不做指令优化。...test.c 经过编译器处理⽣成 test.o add.c 经过编译器处理⽣成 add.o 我们在 test.c 的⽂件中使⽤了 add.c ⽂件中的 Add 函数和 g_val 变量。...我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地 址,但是由于每个⽂件是单独编译的,在编译编译 test.c 的时候并不知道 Add

8010

C语言程序编译和链接

如果再把编译器展开成3个过程,那就变成了下⾯的过程: 预处理(预编译) 在预处理阶段,源⽂件和头⽂件会被处理成为.i为后缀的⽂件。...生成test.i文件 编译  放的是汇编代码:(将.c文件转换为汇编代码) gcc -S test.i -o test.s 经过词法分析、语法分析、语义分析及优化,⽣成相应的汇编代码⽂件。...每个源⽂件都是单独经过编译器处理⽣成对应的⽬标⽂件。...test.c 经过编译器处理⽣成 test.o  add.c 经过编译器处理⽣成add.o  我们在 test.c 的⽂件中使⽤了 add.c ⽂件中的 Add 函数和 g_val 变量。...我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地 址,但是由于每个⽂件是单独编译的,在编译编译 test.c 的时候并不知道 Add

8110
领券