人工优化,不仅会降低代码的可读性和可维护性,而且非常容易引入 bug! 实际上,不管是-O2还是-O3,都是一组优化选项的集合,要知道具体做了什么,可以通过 gcc/g++ 的-c -Q --help=optimizers参数 例如我用的 aarch64-unknown-nto-qnx7.1.0-g++ 编译器,如果想知道加了-O2之后开启了哪些优化项,
GCC优化级别有-O0、-O1、-O2、-O3、-Og、-Os、-Ofast 总结如下: 优化级别说明备注 -O0 关闭所有优化 代码空间大,执行效率低 -O1 基本优化等级 编译器在不花费太多编译时间基础上,试图生成更快、更小的代码 -O2 O1的升级版,推荐的优化级别 编译器试图提高代码性能,而不会增大体积和占用太多编译时间 -O3 ...
2.-O1,-O2,-O3为何方神圣,它们是如何优化编译文件的? (1)首先,她们的真面目是: -O1 提供基础级别的优化 -O2提供更加高级的代码优化,会占用更长的编译时间 -O3提供最高级的代码优化 可以使用-f命令行选项引用每个单独的优化技术。 1, 编译器优化级别1 在优化的第一个级别执行基础代码的优化 这个级别试图执...
编译选项 arm-linux-gnueabihf-g++ -O3 -march=armv7-a -mcpu=cortex-a9 -ftree-vectorize -mfpu=neon -mfpu=vfpv3-fp16 -mfloat-abi=hard -ffast-math 发现并没有多大的效果。 测试循环的浮点运算的加速; 发现是否使用-O3这个编译选项的耗时差别比较大。 问题: g++: error: arm-linux-gnueabihf-gcc: N...
编译优化o3和o0以及volatile关键字?dpdk源码计算udp校验和时出现段错误,排查后大概率是-O3编译优化了,...
GNU编译优化级别-O -O1 -O2 -O3 最近做一个算法的GPU加速,发现实际上使用gcc的-O3(最高级编译优化)选项,可以获得很高的加速比,我的程序里达到了3倍的样子,有时效果甚至比GPU加速好。因此小小学习了下GNU的编译优化。 附言一句,在进行调试的时候,最好关闭编译优化,不然程序自动优化,执行的步骤可能稍有变化。
有更高的性能优化。此优化等级允许进行需要大量编译时分析和资源的优化。-O3指示编译器针对生成的代码的性能进行优化,而忽略生成的代码的大小,这可能会导致代码大小增加,比-O2生成的代码更大。但速度会比比-O2快 5.-Os:平衡的优化 目的是在不显着增加代码大小的情况下提供高性能,即速度的优化和代码大小的增加是合...
gcc/g++ -Q -O3 --help=optimizers 差异如下(左边O3,右边O2):可以看到除了上面官网说的几个选项外,O3还比O2多了下面几个优化:-ftree-loop-distribute-patterns -ftree-loop-vectorize-finline-functions-ftree-slp-vectorize 其中从字面上看跟循环相关的有如下几个:-floop-interchange-floop-unroll-and-...
原因:使用了高优化等级(如-O3或-Ofast),导致编译器花费更多时间进行复杂的优化。 解决方法:降低优化等级,例如从-O3改为-O2,或者使用并行编译(如make -j4)来缩短编译时间。 问题2:程序运行时性能未达预期 原因:优化等级设置不当,或者编译器未能有效应用优化。