o2专题

关于O2优化

一、Ox优化 Ox(x取123)主要是对代码大小的优化,我们基本不用做更多的关心。 通常各种优化都会打乱程序的结构,让调试工作变得无从着手。 并且会打乱执行顺序,依赖内存操作顺序的程序需要做相关处理才能确保程序的正确性。 二、具体优化内容 -O0: 不做任何优化,这是默认的编译选项。 -O和-O1: 对程序做部分编译优化,对于大函数,优化编译占用稍微多的时间和相当大的内存。 使用本项优化,

【编译】gcc -O2 编译flag里面做了什么

本文只从结果进行表述,详细原因请参考:记一次gcc -O2大幅度增加binary size的问题_电影旅行敲代码的博客-CSDN博客 用live555进行了一个测试,正常代码逻辑为以下 <1> -> <2> -> <3> 不设置-O   flag,调用堆栈为<1> -> <2> -> <3>     编译出的文件size     $ ll live555/libBasicUsageEnviro

gcc: O2编译选项 可以掩盖的一种coredump情况

有些代码,如果选择O2选项的话,GCC会认为代码无用,或者根本不会产生任何数据上的变更,没有意义。 有时候会决定将其删除。比如:析构函数里的对对象成员的赋值,因为对象都要被析构了,赋值没有意义,就会将赋值语句从实际的二进制文件里去掉。 这个时候,如果赋值语句如果有问题,就会被O2选项给掩盖掉。 而不带-O2选项的编译结果,可能会出现一种coredump。

gcc: -O2 优化选项的一个副作用:可以掩盖链接,符号未定义错误 undefined reference to

这个-O2 优化选项,可以掩盖链接错误。因为这个包含130多项的优化选项。里面有关于四代码的优化。 假如一个函数A里调用了另一个函数B,但是函数B是外部定义的符号,而且没有定义。 同时如果A函数是个死函数的话,-O2,可能将这个函数A优化为如下的方式,直接返回。看似从未调用这个函数。 (gdb) disass set_shared_ip_state_downDump of assembler

GCC 优化等级(O0、O1、O2、O3)对程序性能的影响

文章目录 前言代码示例性能差异探究原因附录 前言 GCC 有 O0、O1、O2、O3 四级优化等级,你知道它们对程序性能有多少影响吗?知道性能差异产生的根本原因是什么吗?今天就和大家一起研究下。 代码示例 combine4.c #include <stdio.h>#define COUNT 100000000int data[] = {0, 1, 2, 3, 4, 5,