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

gcc -O2的含义

当你在编程时,你可能会使用编译器来优化你的代码。gcc(GNU Compiler Collection)是一个广泛使用的编译器套件,它包含多种编程语言的编译器,如C、C++、Objective-C、Fortran、Java等。gcc的参数中,-O2是一个优化选项,它表示开启第二级的优化。

-O2的含义是让编译器进行更多的优化,以提高生成代码的运行速度和减小可执行文件的大小。这个选项会启用许多优化技术,包括循环展开、常量传播、代码分割等。这些优化可以帮助你的程序更快地运行,并且占用更少的内存。

需要注意的是,-O2选项可能会增加编译时间,因为编译器需要进行更多的优化分析。在发布代码时,建议使用-O2选项进行优化,以提高程序的性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GCC -O2 踩坑指南:严格别名(Strict Aliasing)与整数环绕(Integer Wrap-around)

4、违反严格别名规则 下面我们举几个例子,在 GCC 开启 -O2 优化时,违反严格别名规则导致未定义行为。...4.1.4 GCC 开启 -O2编译优化,避免严格别名 Bug 方法 推荐处理顺序为从左到右: 改代码 > -fno-strict-aliasing > 不开 GCC -O2 优化 > -Wno-strict-aliasing...(掩耳盗铃,强烈不建议) Linux 内核做法是: 在开启 GCC -O2 编译优化同时开启 `-fno-strict-aliasing` 编译参数。...在开启 GCC -O2 编译优化时,对于有符号整数溢出,编译器认为其是未定义行为。...在 GCC 开启 -O2 -fwrapv 或 -O2 -fno-strict-overflow 编译参数后,输出结果为: 2147483647 0 -fwrapv 编译选项指示 GCC 编译器假定加法

27810

GCC -O0 -O1 -O2 -O3 四级优化选项

Gcc 编译优化简介 gcc 提供了为了满足用户不同程度优化需要,提供了近百种优化选项,用来对{编译时间,目标文件长度,执行效率}这个三维模型进行不同取舍和平衡。...下面着重围绕这几个不同级别进行简单介绍。(由于 gcc 不同版本手册差异比较大,以下主要以 gcc-3.4.6 为参考) -O0: 不做任何优化,这是默认编译选项。...-O2(氧气优化) 是比 O1 更高级选项,进行更多优化。Gcc 将执行几乎所有的不包含时间和空间折中优化。...当设置 O2 选项时,编译器并不进行循环打开()loop unrolling 以及函数内联。与 O1 比较而言,O2 优化增加了编译时间基础上,提高了生成代码执行效率。...默认情况下,编译器限制内联尺寸,3.4.6 中限制为 600(具体含义不详,指令条数或代码 size?)可以通过-finline-limit=n 改变这个长度。

3.2K30

宋宝华: 关于Linux编译优化几个必须掌握姿势

其实O2和Os,都是一些优化选项集合: gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts gcc -c -Q -Os --help=optimizers >...O2里面optimize-strlen是开,Os里面这个选项是关闭。相关选项含义可以通过"man gcc"看出(有问题,找男人),譬如man gcc后检索inline-functions: ?...编译,则没有问题: $ gcc -O2 cc.c 原因在于,O2编译,它意识到a==1,所以if(a>2),它不会成立,所以f()没有定义也没有关系。...O2这个时候也不行了: $ gcc -O2 cc.c /tmp/ccXiyBHn.o: In function `main': cc.c:(.text.startup+0x7): undefined reference...重新用O2编译: $ gcc -O2 cc.c /tmp/cc8M338p.o: In function `main': cc.c:(.text+0x19): undefined reference to

2.9K20

CAP 定理含义

分布式系统(distributed system)正变得越来越重要,大型网站几乎都是分布式。 分布式系统最大难点,就是各个节点状态如何同步。...CAP 定理是这方面的基本定理,也是理解分布式系统起点。 本文介绍该定理。它其实很好懂,而且是显而易见。下面的内容主要参考了 Michael Whittaker 文章。...一、分布式系统三个指标 ? 1998年,加州大学计算机科学家 Eric Brewer 提出,分布式系统有三个指标。...系统设计时候,必须考虑到这种情况。 一般来说,分区容错无法避免,因此可以认为 CAP P 总是成立。CAP 定理告诉我们,剩下 C 和 A 无法同时做到。...问题是,用户有可能向 G2 发起读操作,由于 G2 值没有发生变化,因此返回是 v0。G1 和 G2 读操作结果不一致,这就不满足一致性了。 ?

1.1K20

linuxgcc使用方法_linux怎么用gcc编译

大家好,又见面了,我是你们朋友全栈君。 01. 命令概述 gcc命令使用GNU推出基于C/C++编译器,是开放源代码领域应用最广泛编译器,具有功能强大,编译代码支持性能优化等特点。...gcc是GNU编译器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go语言和D语言前端,也包括了这些语言库(如...GCC初衷是为GNU操作系统专门编写一款编译器。GNU系统是彻底自由软件。此处,“自由”含义是它尊重用户自由。 02. 命令格式 用法:gcc [选项] 文件… 03....将 传递给链接器 -save-temps 不删除中间文件 -save-temps= 不删除中间文件 -no-canonical-prefixes 生成其他 gcc 组件相对路径时不生成规范化 前缀...bak]$ gcc test.o testfun.o -o test [deng@localhost bak]$ 到此这篇关于Linux gcc命令具体使用文章就介绍到这了,更多相关Linux gcc

6.6K20

ground truth含义

ground truth在不同地方有不同含义,下面是参考维基百科解释,ground truth in wikipedia.1、在统计学和机器学习中在机器学习中ground truth表示有监督学习训练集分类准确性...有监督机器学习会对训练数据打标记,试想一下如果训练标记错误,那么将会对测试数据预测产生影响,因此这里将那些正确打标记数据成为ground truth。...小面是引用知乎lee philip例子example on 知乎1. 错误数据标注数据1 ( (84,62,86) , 1),其中x =(84,62,86), t = 1 。...(正确标记数据叫做ground truth) 标注数据2 ( (84,162,86) , 1),其中x =(84,162,86), t = 1 。...正确数据标注数据1 ( (84,62,86) , 1),其中x =(84,62,86), t = 1 。

2.6K20

GCC工具具体使用

,比如源代码需要借助编译工具翻译成汇编代码,汇编代码需要借助汇编器翻译成目标代码,最后还要借助连接器帮忙整理汇总, 那么这些个工具集合到一块就叫做工具链 GCC工具链 由GNU提供一整套工具集,这套工具集中包含了汇编器...,编译器和链接器,二进制转换,调试工具等 通过GCC,我们可以一步完成源码到可执行文件编译, 也可以单步独立进行,方便程序员获取中间代码代码,进行调试 GCC常用命令选项 假设只编译单个源文件test.c...多文件编译 比如一个汇编文件aaa.s一个C源文件test.c: 方式一 多文件同时编译 gcc aaa.s test.c -o bbb 方式二 多文件分开编译 gcc -c aaa.s //生成aaa.o...gcc -c test.c //生成test.o gcc test.o aaa.o -o test 方式三 编写makefile文件进行编译 # 我是注释 SRC=aaa.s test.c main...: $(OBJS) #指定需要生成文件名称以及相应依赖关系 gcc -o main $(SRC) #生成所需要指令 # cs-make 以上三种方法相比较,第一中方法编译时需要所有文件重新编译

50730

《linux c编程指南》学习手记1

第一章  c语言基础 linux概述 虚拟文件系统VFS 进程通信机制:管道,信号    消息队列  信号灯  共享内存 第二章  vim与emacs 两种主流编辑器:vim emacs vi 含义...返回命令行,执行如下程序过程,便可以利用gcc编译程序 ? gcc -v 显示版本号 time + 可执行文件,可以显示出 程序执行时间,CPU时间,sys系统消耗时间 ?...gcc 优化   gcc 优化采用 -O1  -O2  -O3 三个级别:   如果数字越大代表优化级别越高,但是优化也不一定全是好处:   有可能会删除不用变量,可能导致调试困难。...可能因为优化加大编译时间。所以优化尽量用在必要地方。...gdb(gcc debugger)gcc调试工具 其他编译器: g++   EGCS   calls  indent  gprof  f2c和p2c

1.6K60

git origin 含义

我们从progit 一书中可以看到: 远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。...我们使用 git remote -v 或者 查看.git/config 可以看到 origin 含义。...但是 origin 并不是指得是远程仓库,而是指得是远程仓库在本地一个指针(这个指针有可能过时)。当我们使用使用merge 时候,我们进行合并时候只是上一次fetch 从远程拿到版本。...我们或许可以再看一下 progit 上面对 远程仓库最新解释: 远程分支(remote branch)是对远程仓库中分支索引。...其实: 在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin含义),并下载其中所有的数据

1.2K10

Linux之gcc使用

a.预处理工作:展开头文件,去注释,宏替换和删除 gcc -E test.c -o test.i -E表示程序开始翻译,当执行完预处理就停下来 -o表示将预处理后形成临时文件(名字任取) 在vim...底行模式下输入:vs+文件名即可打开多个文件 安装gcc:sudo yum -y install gcc b.外部定义宏参数 gcc test.c -DSHOW//在外部给test.c定义宏SHOW...gcc+文件名不加任何选项就是直接将源代码翻译成可执行程序,生成可执行程序默认名称为a.out 外部定义宏只在a.out中生效,并没有改变test.c文件 2.编译(生成汇编) gcc -...S test.i -o test.s -S表示开始翻译程序,当执行完编译过程就停下来 此时再用vim打开就可以到test.c翻译成汇编代码 3.汇编(生成不可执行可重定向二进制目标文件) gcc...od命令,可以发现test.o文件中放着是各种数字组合 4.链接(生成可执行目标文件) gcc test.o 链接完以后就生成了可执行程序 可执行程序默认名称为a.out,但我也有自主命名权

2.9K00

gcc-fstack-protector

是公司模块和函数,故隐藏,对接下去分析没有影响。...但实际上想想不对,如果是栈信息被破坏了,不出意外的话,应该是回溯不到某些很有序函数,这些函数我没上。...一.gcc编译选项-fstack-protector和-fstack-protector-all   正是我在前面猜测错误原因,牛人Stack Guard 就想出了保护栈信息方式,在ebp和ip等信息地址下面放一个保护数...可以证明i溢出并不一定能被检测到,而a检测一定会被检测到。   看下汇编代码对比。   ...四.总结   当然这个举措并不能够完全抑制栈溢出,如果跳过了保护数,那么还是检测不到栈溢出,并且对其他局部变量溢出没有保护。当然每个变量都保护会大大增加程序复杂度。

2.1K20

GCC生成汇编代码

一、查看GCC生成汇编代码 在命令行上用“-S”选项,就能看到C编译器产生汇编代码: #gcc -S code.c  注意:这里是大写-S,如果用小写gcc会说找不到main函数 会在当前目录下生成...                                 # 平衡堆栈: %esp <- %ebp , popl %ebp  ret                                       下面是使用“-O2...”选项开启二级优化效果: #gcc -O2 -S code.c  .file "code.c" .globl _accum  .bss  .align 4 _accum:  .space...edx, %eax             # %eax <- x + y  addl %eax, _accum         # _accum <- _accum + x + y  ret GCC...在 main.c 中有这样函数:   int main()   {        return sum(1,2);   } 然后,我们用如下方法生成可执行文件: #gcc -O2 -o prog

1.9K10

常用gcc__attribute__

浏览代码,查看许多“ __attribute__使用过地方”。 我在想在什么情况下使用什么“ __attribute__”?恰当使用__attribute编码可以提高程序效率。...__attribute __(noinline):防止考虑将函数内联 __attribute __(packed):指定放置结构或联合每个成员以最大程度地减少所需内存。...__attribute __(aligned(X)):增加结构或结构成员对齐方式。...不能使用此属性来减少函数对齐方式,而只能增加它对齐方式。 __attribute __(unused):附加到变量此属性意味着该变量可能未被使用。GCC不会对此变量发出警告。...对于内联声明函数,即使未指定优化级别,此属性也会内联函数。 __attribute __(deprecated):如果在源文件中任何位置使用该变量,则该属性将产生警告。

1.9K90

=和+=含义

在Makefile语法中,时不时会见到各种“=”号赋值语句,除了常见“=”和“:=”,还有“?=”等 那么这些赋值等号分别表示什么含义呢?...“=” “=”是最普通等号,然而在Makefile中确实最容易搞错赋值等号,使用”=”进行赋值,变量值是整个makefile中最后被指定值。...在make时,会把整个makefile展开,拉通决定变量值 “:=” 相比于前面“最普通””=”,”:=”就容易理解多了。”:=”就表示直接赋值,赋予当前位置值。...因此相比于”=”,”:=”才是真正意义上直接赋值。 “?=” “?=”表示如果该变量没有被赋值,则赋予等号后值。举例: VIR ?...= new_value 这种情况下,VIR值就是old_value “+=” “+=”和平时写代码理解是一样,表示将等号后面的值添加到前面的变量上

1.1K20
领券