加减乘符号逆向

编译器一些优化的概念

常量折叠: 计算公式中出现多个常量进行计算时并且编译器可以在编译期间可以进行计算的,这样源码中机会把结果的常量值进行替换
常量传播:指的是在编译期间可以计算出结果的变量转换为常量值

优化方式采用的是窥孔优化方法:百度定义:是一种很局部的优化方式,编译器仅仅在一个基本块或者多个基本块中,针对已经生成的代码,结合CPUs自己指令的特点,通过一些认为可能带来性能提升的转换规则
举个例子:比如你变量+常量的代码发生了常量传播优化,也就是变成了常量+常量,这时候检查是否还能优化,变成常量折叠

优化大部分在Release版本下才会优化. 但是Debug版本也会优化,在不影响用户调试的前提下进行优化

加法

Release版

1常量加常量

    printf("10+5=%d\n", 10 + 5);

在这里插入图片描述
2变量加常量
注意,如果变量是像argc或者scanf函数那种在运行期间确定值的变量,是优化不了的,因为这在编译期间计算不了,不确定

    int nVal1 = 0x10;
    printf("%d", nVal1 + 5);

在这里插入图片描述
3变量加变量

    int nVal1 = 0x10;
    int nVal2 = 0x20;
    printf("%d", nVal1 + nVal2);

在这里插入图片描述

Debug版

1常量加常量

    printf("10+5=%d\n", 10 + 5);

在这里插入图片描述

2变量加常量

    int nVal = 0x10;
    printf("%d", nVal1 + 5);

在这里插入图片描述
3变量加变量

    int nVal1 = 0x10;
    int nVal2 = 0x20;
    printf("%d", nVal1 + nVal2);

在这里插入图片描述

减法

Release版

1常量减常量

 printf("10-5=%d\n", 10 - 5);

在这里插入图片描述
2变量减常量

 	int nVal1 = 0x10;
    printf("%d", nVal1 - 5);

在这里插入图片描述
3变量减变量

    int nVal1 = 0x20;
    int nVal2 = 0x10;
    printf("%d", nVal1 - nVal2);

在这里插入图片描述

Debug版

1常量减常量

 printf("10-5=%d\n", 10 - 5);

在这里插入图片描述
2变量减常量

 	int nVal1 = 0x10;
    printf("%d", nVal1 - 5);

在这里插入图片描述
3变量减变量

    int nVal1 = 0x20;
    int nVal2 = 0x10;
    printf("%d", nVal1 - nVal2);

在这里插入图片描述

乘法

带幂优化概念 : 带幂优化则是我在算乘法的时候, 我可以左移几位, 最终取得我们要的结果,这样优化是为了减少指令周期,增加程序执行效率,当然乘法不是只有这一种优化,我写这个只是为了让自己了解什么叫带幂优化概念,优化方案肯定有好几种的,比如上面写的常量折叠也是,具体优化方案看编译器

Release版

	//不带2的幂
    //常量乘常量
    printf("%d\n", 5 * 5);
    
    //变量量乘常量
    int n1 = 10;
    int n2 = 5;
    printf("%d\n", n1*7);
    
    //变量量乘变量
    printf("%d\n", n1*n2);


    //带幂
    //常量乘常量
    printf("%d\n", 5 * 4);

    //变量量乘常量
    printf("%d\n", n1 * 4);

    //变量量乘变量
    int n3 = 4;
    printf("%d\n", n1*n3);

在这里插入图片描述

Debug版

	//不带2的幂
	//常量乘常量
	printf("%d\n", 5 * 5);

	//变量量乘常量
	int n1 = 10;
	int n2 = 5;
	printf("%d\n", n1 * 7);

	//变量量乘变量
	printf("%d\n", n1*n2);


	//带幂
	//常量乘常量
	printf("%d\n", 5 * 4);

	//变量量乘常量
	printf("%d\n", n1 * 4);

	//变量乘变量
	int n3 = 4;
	printf("%d\n", n1*n3);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值