1 / 43
文档名称:

C++ 程序设计教程(第二版):第6章 性能.ppt

格式:ppt   大小:444KB   页数:43页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C++ 程序设计教程(第二版):第6章 性能.ppt

上传人:窝窝爱蛋蛋 2022/11/20 文件大小:444 KB

下载得到文件列表

C++ 程序设计教程(第二版):第6章 性能.ppt

相关文档

文档介绍

文档介绍:该【C++ 程序设计教程(第二版):第6章 性能 】是由【窝窝爱蛋蛋】上传分享,文档一共【43】页,该文档可以免费在线阅读,需要了解更多关于【C++ 程序设计教程(第二版):第6章 性能 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。*
*
C++程序设计教程(第二版)
第六章性能
Chapter6Performance
*
*
提高性能的意义:
性能对提高编程能力举足轻重
如何提高性能?
以合理使用资源为前提,,提高效率就能提高性能
学****目标:
,对同一问题的不同要求,模仿各种编程技巧与空间布局策略,,亦能应变自如
,学会测算时/空交换的代价,客观评估自身的编程能力
*
*
第六章内容
内联函数(InlineFunctions)
数据结构(DataStructures)
算法(Algorithms)
数值计算(NumericalComputation)
STL算法(STLAlgorithms)
动态内存(DynamicMemory)
低级编程(LowerProgramming)
*
*
(InlineFunctions)
做法:将一些反复被执行的简单语句序列做成小函数
用法:在函数声明前加上inline关键字
作用:不损害可读性又能提高性能
*
*
//==================================
#include<iostream>
boolisDigit(char);//小函数
intmain(){
for(charc;cin>>c&&c!='\n';)
if(isDigit(c))
std::cout<<“Digit.\n";
elsestd::cout<<“NonDigit.\n";
}//---------------------------------
boolisDigit(charch){
returnch>='0'&&ch<='9'?1:0;
}//=================================
频繁调用的函数:用昂贵的开销换取可读性
*
*
//================================
#include<iostream>
intmain(){
for(charc;cin>>c&&c!='\n';)
if(ch>='0'&&ch<='9'?1:0)
std::cout<<“Digit.\n";
else
std::cout<<“NonDigit.\n";
}//===============================
内嵌代码:开销虽少,但可读性差
*
*
内联方式:开销少,可读性也佳
//==================================
#include<iostream>
inlineboolisDigit(char);//小函数
intmain(){
for(charc;cin>>c&&c!='\n';)
if(isDigit(c))
std::cout<<"Digit.\n";
else
std::cout<<"NonDigit.\n";
}//---------------------------------
boolisDigit(charch){
returnch>='0'&&ch<='9'?1:0;
}//=================================
内联标记
放在函数声
明的前面
*
*
内联函数的使用经验:
函数体适当小,且无循环或开关语句,这样就使嵌入工作容易进行,:排序函数不能内联
程序中特别是在循环中反复执行该函数,:上例中的isDigit函数
程序并不多处出现该函数调用,这样就使嵌入工作量相对较少,代码量也不会剧增
*
*
//======================================
#include<iostream>
#include<time>
usingnamespacestd;
//--------------------------------------
intcalc1(inta,intb){returna+b;}
inlineintcalc2(inta,intb){returna+b;}
//--------------------------------------
intmain(){
intx[1000],y[1000],z[1000];
clock_tt=clock();
for(inti=0;i<1000*1000*1000;++i)
z[i]=calc1(x[i%1000],y[i%1000]);
cout<<(clock()-t)/CLK_TCK<<“withoutinline\n";
t=clock();
for(inti=0;i<1000*1000*1000;++i)
z[i]=calc2(x[i%1000],y[i%1000]);
cout<<(clock()-t)/CLK_TCK<<“withinline\n";
}//=====================================
性能测试
初记时
末记时
非内联函数
内联函数
*
*
结果分析:
内联用与不用差很多
结论:
应尽量将函数改造成可内联性质,提高性能
E:\ch06>f0605↙