C++的效率浅析
来源:互联网 发布:程序员的英文单词 编辑:程序博客网 时间:2024/06/06 16:29
自从七十年代C语言诞生以来,一直以其灵活性、高效率和可移植性为软件开发人员所钟爱,成为系统软件开发的首选工具。而C++作为C语言的继承和发展,不仅保留了C语言的高度灵活、高效率和易于理解等诸多优点,还包含了几乎所有面向对象的特征,成为新一代软件系统构建的利器。
class X{public:virtual ~X(); //析构函数virtual void VirtualFunc(); //虚函数inline int InlineFunc() { return m_iMember}; //内联函数void NormalFunc(); //普通成员函数static void StaticFunc(); //静态函数private:int m_iMember;};class XX: public X{public:XX();virtual ~XX();virtual void VirtualFunc();private:String m_strName;int m_iMember2;};
静态函数的调用,如下面的几种方式:
X obj; X* ptr = &obj;obj.StaticFunc();ptr->StaticFunc();X::StaticFunc();
将被编译器转化为一般的C函数调用形式,如同这样:
mangled_name_of_X_StaticFunc(); //obj.StaticFunc();mangled_name_of_X_StaticFunc(); // ptr->StaticFunc();mangled_name_of_X_StaticFunc(); // X::StaticFunc();
普通成员函数的调用,如下列方式:
X obj; X* ptr = &obj;obj.NormalFunc();ptr->NormalFunc();
将被被编译器转化为如下的C函数调用形式,如同这样。
mangled_name_of_X_NormalFunc(&obj); //obj.NormalFunc();mangled_name_of_X_NormalFunc(ptr); // ptr->NormalFunc();
虚函数的多态性只能通过对象指针或对象的引用调用来实现,如下的调用:
X obj;X* ptr = &obj; X& ref = obj;ptr->VirtualFunc();ref.VirtualFunc();
将被C++编译器转换为如下的形式。
( *ptr->vptr[2] )(ptr);( *ptr->vptr[2] )(&ref);
XX::XX(){// 编译器扩充代码所要做的工作 1、调用父类X的缺省构造函数2、设定vptr指向XX类虚函数表3、调用String类的缺省构造函数构造m_strName};
所以为了提高效率,减少不必要的临时对象的产生、拖延暂时不必要的对象定义、用初始化代替赋值、使用构造函数初始化列表代替在构造函数中赋值等方法都能有效提高程序的运行效率。以下举例说明:
1、 减少临时对象的生成。如以传送对象引用的方式代替传值方式来定义函数的参数,如下例所示,传值方式将导致一个XX临时对象的产生
效率不高的做法 高效率做法void Function( XX xx ) void Function( const XX& xx ){{ //函数体 //函数体}}
2、 拖延暂时不必要的对象定义。在C中要将所有的局部变量定义在函数体头部,考虑到C++中对象创建的开销,这不是一个好习惯。如下例,如果大部分情况下bCache为"真",则拖延xx的定义可以大大提高函数的效率。
效率不高的做法高效率做法void Function( bool bCache )void Function( bool bCache ){{ //函数体//函数体XX xx;if( bCache )if( bCache ) {// do something without xx{return;// do something without xx} return;}//对xx进行操作XX xx;//对xx进行操作…return;return;}}
3、 可能情况下,以初始化代替先定义后赋值。如下例,高效率的做法会比效率不高的做法省去了cache变量的缺省构造函数调用开销。
效率不高的做法高效率做法void Function( const XX& xx )void Function( const XX& xx ){{ XX cache; XX cache = xx; cache = xx ;}}
效率不高的做法高效率做法XX::XX()XX::XX() : m_strName( "" ){{ m_strName = ""; … …}}
类似的例子还很多,如何写出高效的C++程序需要实践和积累,但理解C++的底层运行机制是一个不可缺少的步骤,只要平时多学习和思考,编写高效的C++程序是完全可行的。
- C++的效率浅析
- C++的效率浅析
- C++的效率浅析
- C++的效率浅析
- C++的效率浅析
- C++ 的效率浅析
- C++的效率浅析
- C++ 的效率浅析
- C++ 的效率浅析
- 基础入门:C++的效率浅析
- 浅析ArrayList,LinkedList的执行效率
- 浅析如何衡量程序员的生产效率
- c的效率
- 关于c++IO的效率
- 浅析TreeView绑定效率
- 浅析TreeView绑定效率
- c++效率浅析
- js DOM效率浅析
- PPLive在线播放代码
- 图解MYSQL的安装和数据升级
- IT从业人员必看的10个论坛
- 你的组织为自动化测试做好准备了吗?
- 网页播放器代码大全
- C++的效率浅析
- struts总结
- linux中.o,.a,.o,.so文件的意义和编程实现
- 基于机器学习的文本自动分类技术[4]
- 从hash函数到王小云的MD5破解
- 黄金法则
- listBox中的值添加到另一个listbox中,支持多选和去重项
- 编程修养
- 在WINDOWS下安装memcached/在LINUX下安装memcached