2. 阐述-oz和-os优化选项的具体作用 -Oz: 启用大多数-O2优化,但会更加积极地优化代码大小。 可能会增加一些额外的指令来减小代码的总体大小,即使这会增加执行时间。 -Os: 启用所有通常不会增加代码大小的-O2优化。 执行一些旨在减少代码大小的进一步优化,如禁用对齐优化等。 禁用可能会增加代码大小的优化选项,...
级的优化。使用-Os 是不推荐的。 ◼ -O3: 打开所有 -O2 的优化选项并且增加 -finline-functions, -funswitch-loops,- fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize 优化选项。这是最高最危险 的优化等级。用这个选项会延长编译代码的时间,并且在使用 gcc4.x 的系统里不应全局 启用。
在研究编译驱动的makefile的时候,发现GCC的命令行里面有一个-Os的优化选项。 遍查GCC文档,发现了-O0, -O1, -O2, -O3,就是没有发现-Os。 祭出GOOGLE大法搜了一下,终于发现这篇文章说明了-Os的作用: http://www.linuxjournal.com/article/7269 原来-Os相当于-O2.5。是使用了所有-O2的优化选项,但又不缩...
4. -Os 这个优化标识和-O3有异曲同工之妙,当然两者的目标不一样,-O3的目标是宁愿增加目标代码的大小,也要拼命的提高运行速度,但是这个选项是在-O2的基础之上,尽量的降低目标代码的大小,这对于存储容量很小的设备来说非常重要。 为了降低目标代码大小,会禁用下列优化选项,一般就是压缩内存中的对齐空白(alignment ...
在研究编译驱动的makefile的时候,发现GCC的命令行里面有一个-Os的优化选项。 遍查GCC文档,发现了-O0, -O1, -O2, -O3,就是没有发现-Os。 祭出GOOGLE***搜了一下,终于发现这篇文章说明了-Os的作用: http://www.linuxjournal.com/article/7269
O2 会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间。 O3 在 O2 的基础上进行更多的优化,例如使用伪寄存器网络,普通函数的内联,以及针对循环的更多优化。 Os 主要是对代码大小的优化,我们基本不用做更多的关心。 通常各种优化都会打乱程序的结构,让调试工作变得无从着手。并且会...
、优化级别越高,通常情况下生成的可执行文件越小。当优化到一定程度后,可执行可能会变大,如O2比O1大 3、当优化到一定程度后,可能就不会再次优化(与代码有关系),如O2和O3一样 4、Os使用所有O2级别的优化,但对齐优化除外。 对齐优化按照体系结构相关方式将函数,循环,jump和label对准为2的幂的倍数的地址(...
循环优化(Loop Optimization):改变循环结构,减少循环次数或提前退出循环,优化循环执行效率。 寄存器分配(Register Allocation):将变量存储在寄存器中,减少对内存的访问开销。 gcc提供了从 O0-O3 以及 Os 这几种不同的优化级别,在这些选项中,包含了大部分有效的编译优化选项,并且可以在这个基础上,对某些选项进行屏蔽或...
-0s 会关闭以下优化选项:-fali 8、gn-functions-falign-jumps-falign-loops-falign-labels-freorder-blocks-freorder-blocks-and-partition-fprefetch-loop-arrays-ftree-vect-loop-version关于GCC编译的优化选项一共有 -00 (默认),-01 , -02, -03及-Os五个参数。各 个参数优选内容如上所示。但是各个优化...