您好,欢迎访问这里是您的网站名称官网!
常见问答
联系我们
首页-T6-T6娱乐城设备公司
邮箱:admin@youweb.com
电话:400-123-4567
地址:广东省广州市天河区88号
当前位置: 首页 > 新闻动态 > 常见问答

常见问答

gcc/g++ 优化标识 -O1 -O2 -O3 -Os -Ofast -Og的作用
发布时间:2024-07-29 14:08:28浏览次数:

注意:用GDB调试的时候需要关闭优化选项

当优化标识被启用之后,gcc编译器将会试图在不改变程序语义的情况下改变程序的结构,
以满足代码大小最小或运行速度更快等目标

内容摘自:Options That Control Optimization

这两个命令的效果是一样的,目的都是在不影响编译速度的前提下,尽量采用一些优化算法降低代码大小和可执行代码的运行速度。并开启如下的优化选项:

 
 

该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外,还会采用几乎所有的目标配置支持的优化算法,用以提高目标代码的运行速度

 
 

该选项除了执行-O2所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代CPU中的流水线,Cache等

 
 

这个优化标识和-O3有异曲同工之妙,当然两者的目标不一样,
-O3的目标是宁愿增加目标代码的大小,也要拼命的提高运行速度,
但是这个选项是在-O2的基础之上,尽量的降低目标代码的大小,这对于存储容量很小的设备来说非常重要。
为了降低目标代码大小,会禁用下列优化选项,一般就是压缩内存中的对齐空白(alignment padding)

 
 

该选项将不会严格遵循语言标准,除了启用所有的-O3优化选项之外,也会针对某些语言启用部分优化。如:-ffast-math ,对于Fortran语言,还会启用下列选项

 
 

优化调试体验。 -Og应该是标准edit-compile-debug周期的优化级别选择,
在保持快速编译和良好调试体验的同时,提供合理的优化级别。
用于生成可调试代码,因为某些收集调试信息的编译器通道在以下位置被禁用 -O0。
像-O0 -Og完全禁用了许多优化过程,因此控制它们的单个选项无效。除此以外-Og 使所有 -O1 优化标志,但那些可能会干扰调试的标志除外:

平台注册入口