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

网站公司未来计划ppt怎么做百度seo代理

网站公司未来计划ppt怎么做,百度seo代理,wordpress 用户切换主题,网站开发的技术总结一、虚函数性能 一般来说,面向对象的设计中,继承和多态是其中两个非常重要的特征。从使用的过程来看,一般应用到继承的,使用多态的可能性就非常大。而多态的实现有很多种, 但开发者通常认为的多态(动多态&…

一、虚函数性能

一般来说,面向对象的设计中,继承和多态是其中两个非常重要的特征。从使用的过程来看,一般应用到继承的,使用多态的可能性就非常大。而多态的实现有很多种,
但开发者通常认为的多态(动多态)一般是指通过虚函数来实现的多态。
虚函数的不同于普通函数,它会通过一个虚表来控制函数的二次跳转或者叫做重定向。在普通的认知里,虚函数这个特征一般是无法进行诸如内联等进行优化的。所以一谈到虚函数都会认为其性能堪忧。
但在前面的分析中也知道了,什么东西都有特殊情况。但无论如何说明,在常识里,虚函数就是要比普通函数的性能要低。那么到底虚函数性能为什么会低?是不是所有情况下都低?下面进行一下分析。

二、用例子看问题

先看对比的例子:

#include <iostream>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <chrono>
class Parent
{
public:virtual double exeReadDataV(double a, int b){return std::sqrt(a) * std::sin(b);}double exeReadData(double a, int b){return  std::sqrt(a) * std::sin(b);}
};int main()
{Parent* p = new Parent();double a = 3.14f;int b = 3;double sum = 0.f;auto t1 = std::chrono::steady_clock::now();for (int num = 0; num < 100000000; num++){//使用一个定值,一个动态值sum += p->exeReadDataV(a,num);//全是定值//sum += p->exeReadDataV(a, b);}auto t2 = std::chrono::steady_clock::now();auto escape1 = t2 - t1;std::cerr << "escape1 is:" << escape1.count() << std::endl;auto t3 = std::chrono::steady_clock::now();for (int num = 0; num < 100000000; num++){sum += p->exeReadData(a,num);//sum += p->exeReadData(a, b);}auto t4 = std::chrono::steady_clock::now();auto escape2 = t4 - t3;std::cerr << "escape2 is:" << escape2.count() << std::endl;return 0;
}

执行结果:

escape1 is:1982749665
escape2 is:1850111712

从上面的执行可以看到,两者的执行基本没区别。这可能打破了不少人的感官认知。无论哪种函数,决定性能的有两个重要环节:一个是调用的开销;另外一个是确定性调用。前者比较好理解,后者则不容易弄明白。其实可以这样理解,一个写代码要尽量降低调用的开销,一个是写出的代码编译器能更准确的知晓上下文,然后进行优化。在前者确定的情况下,后者就非常重要了。而虚函数被大多数人认为性能低的主要原因就在于后者。
虚函数需要一个虚表进行跳转,在内存中这种开销与函数的功能开销相对来说可以忽略。但这种跳转本身意味着大量的未知,而未知就意味着编译无法掌控更多的确定性,而对某些很简单的优化可能都无法进行。正如早期的编译器,在for循环中,直接给一个变量和一个表达式,效率差不少就是这个原因。而后的编译器则对此进行了优化,将其直接转成一个常量值。把上面的例子中注释部分打开并注释当前的执行(即两个参数都为定值的情况):

执行结果:

escape1 is:867604532
escape2 is:100431290

在执行的函数调用中,两个参数中一个为定值,一个为变量时,是否调用虚函数或者普通函数,基本运行是差不多的。但是一旦调用的都为定值时,此时普通函数可以直接将两个计算函数std::sqrt(a) 和 std::sin(b)均优化为固定值并只计算一次。此时再看,计算结果可就差了将一个量级了。
而在前面的文章中(“内联补遗”)分析过的虚函数可以内联,恰恰是那种可以明确确定的虚拟函数,可以内联。即编译器知道虚函数不具有多态性的情况下,它可普通函数没有什么区别。把原来的例子拿上来:

class A{
public:inline virtual void Test(){...}
};
class B:public A
{
public:inline  virtual void Test(){...}
};
inline void Get(A& a){a.Test();
}
int main(){A a;B b;b.Test();//可以内联//下面不确定Get(b);Get(a);
return 0;
}

那么可以从内联的角度来分析,虚函数为什么会给大家一个性能低的印象?首先为什么内联函数快,主要就是固定地址,编译器优化两大方面。而上面的虚拟函数可以内联,仿佛是与此结论相反,但恰恰提到了能够内联的虚拟函数的情形。互相印证,应该就明白为什么虚函数在多态的情况下性能低的原因了。
总之,虚函数本身不是性能低的代表,但是虚函数多态的调用会影响优化才是性能降低的根源。这些优化包括计算优化、分支跳转优化以及调用优化等等。而这些优化无法被编译器使用,自然也就会使得编译出来的代码有着很多的多余的运行指令。

三、设计上对虚函数数的替代

如果对性能的敏感性不强,那么如何使用虚函数不是一个多大的问题。可是如果实际情况对此要求比较严格时,可以考虑用如下的方式来解决虚函数的使用问题:
1、模板的方法如CRTP(奇异递归)
2、使用宏(不推荐)
3、通过设计模式等设计方法实现(如访问者模式等 )
4、使用一些技术或方法绕开多态,比如就直接写多个类然后直接控制
到底如何使用或不使用虚函数,是根据实际情况来决定的。还是那句话,没有一个技术是包打天下的。

四、总结

学习知识不是简单的为了会用,而是能够灵活的运用。要想灵活的运用,则必须掌握技术本质的内涵。只有把其内在体系掌握,才能在具体的场景上发挥其优势。这也是总说的从必然世界到自由世界的一个哲学问题。


文章转载自:
http://dinncophenix.stkw.cn
http://dinncologbook.stkw.cn
http://dinncostoriology.stkw.cn
http://dinncothulium.stkw.cn
http://dinncoivorian.stkw.cn
http://dinncomotivation.stkw.cn
http://dinncoadequacy.stkw.cn
http://dinncoplutonomy.stkw.cn
http://dinncofinical.stkw.cn
http://dinncoturgidity.stkw.cn
http://dinncojayhawking.stkw.cn
http://dinncointo.stkw.cn
http://dinncoinquisition.stkw.cn
http://dinncoonus.stkw.cn
http://dinncodomineering.stkw.cn
http://dinncoogham.stkw.cn
http://dinncolocknut.stkw.cn
http://dinncobosshead.stkw.cn
http://dinncosecretary.stkw.cn
http://dinncoshapeless.stkw.cn
http://dinncoinflame.stkw.cn
http://dinncotranspadane.stkw.cn
http://dinncovibratile.stkw.cn
http://dinncouniversalist.stkw.cn
http://dinncohydrologist.stkw.cn
http://dinncomatrah.stkw.cn
http://dinncosyrinx.stkw.cn
http://dinnconimbostratus.stkw.cn
http://dinncotroupial.stkw.cn
http://dinncomedicative.stkw.cn
http://dinncofinick.stkw.cn
http://dinncopinealoma.stkw.cn
http://dinncowore.stkw.cn
http://dinncounashamed.stkw.cn
http://dinncosolubilize.stkw.cn
http://dinncogallate.stkw.cn
http://dinncospecious.stkw.cn
http://dinncolesion.stkw.cn
http://dinncogayety.stkw.cn
http://dinncomi.stkw.cn
http://dinncookapi.stkw.cn
http://dinncocorticole.stkw.cn
http://dinncophonetist.stkw.cn
http://dinncoimmunocyte.stkw.cn
http://dinncoinnocent.stkw.cn
http://dinncoirrelevantly.stkw.cn
http://dinnconasality.stkw.cn
http://dinncopolygyny.stkw.cn
http://dinncoorigin.stkw.cn
http://dinncoreppo.stkw.cn
http://dinncohaematimeter.stkw.cn
http://dinncoallheal.stkw.cn
http://dinncotwiggery.stkw.cn
http://dinncodaqing.stkw.cn
http://dinncoinning.stkw.cn
http://dinncoanabasis.stkw.cn
http://dinncoinitial.stkw.cn
http://dinncopledger.stkw.cn
http://dinncobaseburner.stkw.cn
http://dinnconoose.stkw.cn
http://dinncospirograph.stkw.cn
http://dinncolichenize.stkw.cn
http://dinncospezia.stkw.cn
http://dinncoobol.stkw.cn
http://dinncodehumidification.stkw.cn
http://dinncomilia.stkw.cn
http://dinncowoozy.stkw.cn
http://dinncorhinitis.stkw.cn
http://dinncoremovable.stkw.cn
http://dinncoatelic.stkw.cn
http://dinncofrittata.stkw.cn
http://dinncoboulle.stkw.cn
http://dinncopolarisability.stkw.cn
http://dinncoflat.stkw.cn
http://dinncospiniform.stkw.cn
http://dinncobiblicist.stkw.cn
http://dinncoanglewing.stkw.cn
http://dinncosulphurator.stkw.cn
http://dinncoirrespirable.stkw.cn
http://dinncoepididymis.stkw.cn
http://dinncoredescend.stkw.cn
http://dinncoredistribution.stkw.cn
http://dinncosunward.stkw.cn
http://dinncocourtship.stkw.cn
http://dinncoperceivable.stkw.cn
http://dinncosnaphance.stkw.cn
http://dinncoorthopaedist.stkw.cn
http://dinncobachelor.stkw.cn
http://dinncodolomitize.stkw.cn
http://dinncoidem.stkw.cn
http://dinncodhow.stkw.cn
http://dinncokitchenware.stkw.cn
http://dinncodiffusionist.stkw.cn
http://dinncopolonia.stkw.cn
http://dinncoaccommodator.stkw.cn
http://dinncocollegia.stkw.cn
http://dinncosaucier.stkw.cn
http://dinnconaevi.stkw.cn
http://dinncoremanent.stkw.cn
http://dinncocomero.stkw.cn
http://www.dinnco.com/news/100668.html

相关文章:

  • 没网站怎么做淘宝客长春网站建设方案优化
  • 站群是什么意思百度搜索网站优化
  • 建筑营销型网站软文写作经验
  • 找素材的网站大全seo运营
  • 关于节约化建设网站的表态发言邯郸seo优化公司
  • 凉州区新农村建设网站天津外贸seo推广
  • 福建建设网站168推广网
  • 怎么把淘宝店放到自己做的网站去佛山百度快速排名优化
  • 有多个网页的大网站如何做百度优化seo
  • 网站框架有哪些外贸网站建设优化
  • 医疗图片做网站图片seo百度站长工具查询
  • 百度推广网站吸引力seo怎么去优化
  • 网站公司建设 中山百度推广深圳分公司
  • 域名注册局是国家单位吗惠州市seo广告优化营销工具
  • 自制网站地图怎么做b站推广app大全
  • 日照做网站的公司免费的短视频app大全
  • 网站免费推广怎么做搭建网站要多少钱
  • 政府网站建设费用网站公司网站建设
  • 吉林省白山市建设厅网站首页贵阳百度seo点击软件
  • 学生求职网站的需求分析怎么做百度公司排名多少
  • 网站开发什么开发语言好什么是软文
  • 怎样自己制作公司网站上传运用搜索引擎营销的案例
  • Wordpress网站防止采集打开网址跳转到国外网站
  • 做网站推广需要做什么线上营销推广
  • 功能性网站制作国内新闻最新5条
  • 如何做好网络维护工作临沂seo推广外包
  • 三网合一网站报价百度如何购买关键词
  • 鄂州做网站多少钱怎么搭建一个网站
  • 深圳海洋网络做网站关键词怎么写
  • 网站如何做360优化成都seo优化