你的位置:首页 > 软件开发 > ASP.net > C++反汇编笔记(五)编译器(VS2013)常用的几个优化技巧(1)

C++反汇编笔记(五)编译器(VS2013)常用的几个优化技巧(1)

发布时间:2015-04-07 16:01:02
编译器的工作过程中可以分为几个阶段:预处理-》词法分析-》语法分析-》语义分析-》中间代码生成-》目标代码生成。其中,优化的机会一般存在于中间代码生成或目标代码生成这两个阶段。尤其是在中间代码生成阶段所做的优化,这类优化不具备设备相关性,在不同的硬件环境中都能通用。debug下, ...

编译器的工作过程中可以分为几个阶段:预处理-》词法分析-》语法分析-》语义分析-》中间代码生成-》目标代码生成。其中,优化的机会一般存在于中间代码生成或目标代码生成这两个阶段。尤其是在中间代码生成阶段所做的优化,这类优化不具备设备相关性,在不同的硬件环境中都能通用。

debug下,为了调试方便,保持原码与反汇编代码的一一对应,只是进行了很少的优化。

常见的与设备无关的优化方案有以下几种:

1、常量折叠2、常量传播3、减少变量4、剪支优化5、公共表达式6、复写传播7、顺序语句代替分支8、强度削弱9、数学变换10、代码外提

第一格是C++原码,第二格是debug下反汇编代码,第三格是release反汇编下代码,重点看。

代码中的所有输入输出句都是为了防止变量被优化掉,没有其他意义。

 

C++反汇编笔记(五)编译器(VS2013)常用的几个优化技巧(1)C++反汇编笔记(五)编译器(VS2013)常用的几个优化技巧(1)
#include <iostream>using namespace std;int main(){//=======================================常量折叠与常量传播  int a1;  a1 = 1 + 1;  cout << a1 << endl;//=======================================减少变量  int x1, y1, m1, n1;  cin >> m1 >> n1;  x1 = m1 * 2;  y1 = n1 * 2;  if (x1 > y1)    cout <<"TRUE"<< endl;//=======================================公共表达式  int x2, y2, m2;  cin >> m2 ;  x2 = m2 * 2;  y2 = m2 * 2;  cout << x2 << y2 << endl;  cin >> x2 >> y2;//=======================================复写传播  int x3, y3, a,c;  cin >> a>>c;  x3 = a;  y3 = x3 + c;  cout << x3 << y3 << endl;  cin >> x3 >> y3;//=======================================剪去不可达分支(剪支优化)  if (1 > 2)    cout << "TRUE" << endl;//=======================================顺序语句代替分支  int a2;  cin >> a2;  a2 == 5 ?a2= 6 :a2= 7;  cout << a2<< endl;//=======================================强度削弱  int x4, y4, a3;  cin >> a3 ;  x4 = a3*2;  y4 = a3 / 4;  cout << x4 << y4;//=======================================数学变换  int x5, y5, a4, b4;  cin >> a4 >> b4;  x5 = a4 * 1;  y5 = a4*x5 + b4*x5;  cout << x5 << y5 << endl;//=======================================代码外提  int x6, y6;  cin >> x6 >> y6;  while (x6 < y6 / 2)  {    cout << x6 << endl;    x6++;  }//===============================================  system("pause");  return 0;}

原标题:C++反汇编笔记(五)编译器(VS2013)常用的几个优化技巧(1)

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录