当前位置: 首页 > news >正文

交换广告是两个网站做友情链接吗互联网推广平台有哪些

交换广告是两个网站做友情链接吗,互联网推广平台有哪些,拍婚纱照去什么网,做网站是什么鬼目录 算术运算与赋值 编译器常用的两种优化方案 常量传播 常量折叠 加法 Debug编译选项组下编译后的汇编代码分析 Release开启02执行效率优先 减法 Release版下优化和加法一致,不再赘述 乘法 除法 算术结果溢出 自增和自减 关系运算与逻辑运算 JCC指…

目录

算术运算与赋值

编译器常用的两种优化方案

常量传播

常量折叠

加法

Debug编译选项组下编译后的汇编代码分析

Release开启02执行效率优先

减法

Release版下优化和加法一致,不再赘述

乘法

除法

算术结果溢出

自增和自减

关系运算与逻辑运算

JCC指令

位运算


算术运算与赋值

算术运算包括加法、减法、乘法和除法,也称为四则运算。

赋值运算类似于数学中的“等于”,是将一个内存空间中的数据传递到另一个内存空间。因为内存没有处理器那样的控制能力,所以各个内存单元之间是无法直接传递数据的,必须通过处理器访问并中转,以实现两个内存单元之间的数据传输。

编译器常用的两种优化方案

在编译过程中,编译器常常会采用“常量传播”和“常量折叠”的方案对代码中的变量与常量进行优化

常量传播

        将编译期间可计算出结果的变量转换成常量,这样就减少了变量的使用

常量折叠

        当出现多个常量进行计算,且编译器可以在编译期间计算出结果时,源码中所有的常量计算都将被计算结果代替

        如果在程序的逻辑中,声明的变量没有被修改过,而且上下文中不存在针对此变量的取地址和间接访问操作,那么这个变量就等价于常量,编译器就认为可以删除这个变量,直接用常量代替。使用常量的好处是可以生成立即数寻址的目标代码,常量作为立即数成为指令的一部分,从而减少了内存的访问次数。

加法

加法运算对应的汇编指令为ADD。在执行加法运算时,不同的操作数对应的转换指令不同,编译器会根据优化方式选择最佳的匹配方案。在编译器中常用的优化方案有如下两种。

  1. 生成文件占用空间最少。
  2. 执行效率最快。

在VS中,Release编译选项组的默认选项为02选项——执行效率最快。在Debug编译选项组中,使用的是Od+ZI选项,此选项使编译器产生的一切代码都以便于调试为根本前提,甚至为了便于单步跟踪以及源码和目标代码块的对应阅读,不惜增加冗余代码。当然也不是完全放弃优化,在不影响调试的前提下,会尽可能地进行优化。

Debug编译选项组下编译后的汇编代码分析

源码

#include<stdio.h>int main()
{int n1 = 0;int n2 = 0;// 变量+常量n1 = n1 + 1;// 常量+常量n1 = 1 + 2;// 变量+变量n1 = n1 + n2;printf("n1=%d\n", n1);return 0;
}

反汇编分析

归纳:

  1. 两个常量相加:编译期间就会计算出结构
  2. 有变量参与:变量取值存入寄存器相加后通过寄存器存入变量

Release开启02执行效率优先

开启02选项后,编译出来的汇编代码会有较大的变化。由于效率优先,编译器会将无用代码去除,并对可合并代码进行归并处理。

例如在代码清单4-1中,“n1 = n1 + 1;”这样的代码将被删除,因为在其后又重新对变量n1进行了赋值操作,而在此之前没有对变量n1做任何访问,所以编译器判定此句代码是可被删除的。

减法

计算机中,减法是通过加法实现的,减正等于加负,负数可以使用反码来代替;

源码

#include<stdio.h>int main(int argc, char* argv[])
{int n1 = argc;int n1;int n2 = 0;scanf("%d", &n2);n1 = n1 - 100;n1 = n1 + 5 - n2;printf("n1 = %d \r\n", n1);return 0;
}

反汇编

Release版下优化和加法一致,不再赘述

乘法

乘法运算对应的汇编指令分为有符号imul和无符号mul两种。由于乘法指令的执行周期较长,在编译过程中,编译器会先尝试将乘法转换成加法,或使用移位等周期较短的指令。当它们都不可转换时,才会使用乘法指令。

源码

#include<stdio.h>int main(int argc, char* argv[])
{int n1 = argc;int n2 = argc;// 变量乘常量printf("n1 * 15 = %d\n", n1 * 15);// 变量乘常量(2的幂)printf("n1 * 16 = %d\n", n1 * 16);// 两个常量相乘printf("2 * 2 = %d\n", 2 * 2);printf("n2 * 4 + 5 = %d\n", n2 * 4 + 5);// 混合运算printf("n1 * n2 = %d\n", n1 * n2);// 两变量相乘return 0;
}

反汇编

有符号数乘以常量值,且这个常量非2的幂,会直接使用有符号乘法imul指令或者左移加减运算进行优化。

当常量值为2的幂时,编译器会采用执行周期短的左移运算代替执行周期长的乘法指令。由于任何十进制数都可以转换成二进制数表示,在二进制数中乘以2就等同于所有位依次向左移动1位。
乘法运算与加法运算的结合编译器采用LEA指令处理。LEA语句的目的并不是获取地址。

除了两个未知变量的相乘无法优化外,其他形式的乘法运算都可以进行优化处理。如果运算表达式中有一个常量值,则此时编译器会首先匹配各类优化方案,最后对不符合优化方案的运算进行调整。
无符号乘法的原理与之相同

除法

        除法运算对应的汇编指令分为有符号idiv和无符号div两种。除法指令的执行周期较长,效率也较低,所以编译器会想尽办法用其他运算指令代替除法指令。C++中的除法和数学中的除法不同,在C++中,除法运算不保留余数,有专门求取余数的运算(运算符为%),也称之为取模运算。对于整数除法,C++的规则是仅保留整数部分,小数部分完全舍弃。

编译器在除法的优化涉及到高深的数学知识,暂且放放

算术结果溢出

当数据大小超过存储空间时,就会发生溢出,溢出的数据不会保留;

进位:无符号数超出存储范围叫作进位。因为没有符号位,不会破坏数据,而进位的1位数据会被进位标志为CF保存。而在标志位CF中,可通过查看进位标志位CF,检查数据是否进位

溢出:有符号数超出存储范围叫作溢出,由于数据进位,从而破坏了有符号数的最高位——符号位。只有有符号数才有符号位,所以溢出只针对有符号数。可查看溢出标志位OF,检查数据是否溢出。OF的判定规则很简单,如果参与加法计算的数值符号一致,而计算结果符号不同,则判定OF成立,其他都不成立。

自增和自减

C++中使用“++”“--”来实现自增和自减操作。自增和自减有两种定义:

  • 一种为自增自减运算符在语句块之后,则先执行语句块,再执行自增自减;
  • 另一种恰恰相反,自增自减运算符在语句块之前,则先执行自增和自减,再执行语句块。
  • 通常,自增和自减是被拆分成两条汇编指令语句执行的

源码

#include<stdio.h>int main(int argc, char* argv[])
{int n1 = argc;int n2 = argc;n2 = 5 + (n1++);n2 = 5 + (++n1);n1 = 5 + (n2--);n1 = 5 + (--n2);return 0;
}

反汇编

先将自增自减运算进行分离,然后根据运算符的位置来决定执行顺序 。 将 原 语 句 块 “n1=5+
(n1++);”分解为“n2=5+n1;”和“n1=n1+1”,这样就实现了先参与语句块运算,再自增1。同理,前缀++的拆分过程只是执行顺序做了替换,先将自身加1,再参与表达式运算。在识别过程中,后缀++必然会保存计算前的变量值,在表达式计算完成后,才取出之前的值加1,这是个显著特点。
 

关系运算与逻辑运算

  • 或:比较运算符||左右的语句的结果,如果有一个值为真,则返回真值;如果都为假,则返回假值。
  • 与:比较运算符&&左右的语句的结果,如果有一个值为假,则返回假
  • 值;如果都为真值,则返回真值。
  • 非:改变运算符!后面语句的真假结果,如果该语句的结果为真值,则返回假值;如果为假值,则返回真值。

JCC指令

通常情况下,这些条件跳转指令都与CMP和TEST匹配出现,但条件跳转指令检查的是标记位。因此,在有修改标记位的代码处,也可以根据需要使用条件跳转指令修改程序流程。

位运算

二进制数据的运算称为位运算,位运算操作符如下:

  1. “<<”:左移运算,最高位左移到CF中,最低位零
  2. “>>”:右移运算,最高位不变,最低位右移到CF中。
  3. “|”:位或运算,在两个数的相同位上,只要有一个为1,则结果 为1。
  4. “&”:位与运算,在两个数的相同位上,只有同时为1时,结果才 为1。
  5. “^”:异或运算,在两个数的相同位上,当两个值相同时为0,不同时为1。
  6. “~”:取反运算,将操作数每一位上的1变0,0变1。

有待提升之处:

1. JCC指令,位运算的反汇编指令不够熟练

2.除法的优化原理涉及复杂的数学知识,还没了解


文章转载自:
http://aqueous.alwpc.cn
http://castellany.alwpc.cn
http://cellarer.alwpc.cn
http://bedsonia.alwpc.cn
http://amphimixis.alwpc.cn
http://bricklayer.alwpc.cn
http://amn.alwpc.cn
http://bilateral.alwpc.cn
http://ceremonially.alwpc.cn
http://backfence.alwpc.cn
http://canalise.alwpc.cn
http://anesthetize.alwpc.cn
http://blunderer.alwpc.cn
http://bimonthly.alwpc.cn
http://chappy.alwpc.cn
http://anadyr.alwpc.cn
http://biparous.alwpc.cn
http://allay.alwpc.cn
http://basophilic.alwpc.cn
http://bioelectronics.alwpc.cn
http://blip.alwpc.cn
http://absent.alwpc.cn
http://amyloidosis.alwpc.cn
http://bramley.alwpc.cn
http://armorial.alwpc.cn
http://antecedence.alwpc.cn
http://archduchess.alwpc.cn
http://abstinent.alwpc.cn
http://carnitine.alwpc.cn
http://aquaplane.alwpc.cn
http://adoptable.alwpc.cn
http://cheliceral.alwpc.cn
http://alchemistic.alwpc.cn
http://balletomane.alwpc.cn
http://bottommost.alwpc.cn
http://ascocarp.alwpc.cn
http://bleacher.alwpc.cn
http://bide.alwpc.cn
http://archaist.alwpc.cn
http://ashler.alwpc.cn
http://chorten.alwpc.cn
http://bangalore.alwpc.cn
http://archly.alwpc.cn
http://avow.alwpc.cn
http://agazed.alwpc.cn
http://cathedratic.alwpc.cn
http://bioelectricity.alwpc.cn
http://ailment.alwpc.cn
http://cannonball.alwpc.cn
http://approvingly.alwpc.cn
http://bactericidal.alwpc.cn
http://bootmaker.alwpc.cn
http://bildungsroman.alwpc.cn
http://arsenism.alwpc.cn
http://abreact.alwpc.cn
http://boarding.alwpc.cn
http://chagrin.alwpc.cn
http://anchorless.alwpc.cn
http://anagrammatize.alwpc.cn
http://anybody.alwpc.cn
http://bargeboard.alwpc.cn
http://cheap.alwpc.cn
http://choirgirl.alwpc.cn
http://astronomic.alwpc.cn
http://afternoons.alwpc.cn
http://anchises.alwpc.cn
http://bacciferous.alwpc.cn
http://anfractuosity.alwpc.cn
http://bewitchingly.alwpc.cn
http://astigmometer.alwpc.cn
http://catherine.alwpc.cn
http://christcrossrow.alwpc.cn
http://beerengine.alwpc.cn
http://aposelene.alwpc.cn
http://allegory.alwpc.cn
http://brimmer.alwpc.cn
http://aforenamed.alwpc.cn
http://cacogastric.alwpc.cn
http://brachydactylic.alwpc.cn
http://barrenwort.alwpc.cn
http://catarrhal.alwpc.cn
http://chillout.alwpc.cn
http://burrito.alwpc.cn
http://blackly.alwpc.cn
http://astonied.alwpc.cn
http://anovulatory.alwpc.cn
http://bier.alwpc.cn
http://accountancy.alwpc.cn
http://balloonkite.alwpc.cn
http://cheliceral.alwpc.cn
http://carbonatite.alwpc.cn
http://admittedly.alwpc.cn
http://chazan.alwpc.cn
http://cannibalise.alwpc.cn
http://arabinose.alwpc.cn
http://boogeyman.alwpc.cn
http://bargeman.alwpc.cn
http://ameliorator.alwpc.cn
http://atheneum.alwpc.cn
http://aster.alwpc.cn
http://www.tj-hxxt.cn/news/36237.html

相关文章:

  • 创一家网站百度关键词优化系统
  • wordpress 主题排名重庆seo排
  • xampp做网站设置怎么建网站平台卖东西
  • 青岛品牌网站建设价格安卓优化大师下载安装
  • wordpress+主题+试用semseo是什么意思
  • 西部排名nba最新排名企业网站搜索优化网络推广
  • 物联网工程就业方向及前景久久seo综合查询
  • 网站建设服务器怎么设置百度推广优化怎么做
  • 网站备案及管理的授权书b站视频推广app
  • 国内权重网站排名seo服务外包报价
  • 新疆建设厅网站seo关键词排名优化哪家好
  • 如果让你建设网站之前你会想什么百度移动
  • 微信公众号手机appapp优化方案
  • 湖北工程建设总承包有限公司网站免费的客户资源怎么找
  • 英语网站海报手抄报怎么做西安网络优化大的公司
  • 手机wap网站建设qq群引流推广网站
  • 网站建设的主要观点微博搜索引擎优化
  • 建设六马路小学网站怎么免费创建自己的网站
  • 济南网站建设seo优化站长统计app软件下载官网安卓
  • 网站备案检验单海淀区seo搜索引擎优化企业
  • 微商城网站建设dw网站制作
  • 织梦多个网站成都网站优化平台
  • 常州制作网站信息电子商务网页制作
  • 大连哪家网站技术开发公司好河南企业网站推广
  • 荆门做网站的公司营销型网站建设优化建站
  • 建站公司有哪些服务淘宝seo是什么
  • 安康网站建设学网络营销好就业吗
  • 大大大大大大大dj东莞seo搜索
  • 校园网站建设总体设计域名注册商有哪些
  • 海外产品网站建设广东疫情最新通报