合理使用 inline来优化程序 尽可能减少临时对象 尽可能使用初始化列表

 1、合理使用inline 

  调用 函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序 内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前 要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执 行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特 别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率 问题更为重要。引入内联函数实际上就是为了解决这一问题  

   在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的 函数体来进行替换。显然,这种做法不会产生转去转回的问题,但是由于在编译 时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空 间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为 代价来换取时间的节省,典型的空间换时间。

   inline函数使编译器在函数调用处用函数体代码代替函数调用指令。 在生成的可执行文件中, 在调用函数处插入函数体中的代码。 这样, 程序执行到该函数的调用时,实际上并没有进行调用函数时在函数栈上的进栈出栈等操作, 而是直接执行函数体中
的代码。
inline函数至少在如下三个方面提高了程序的时间性能:
1)避免了函数调用必须执行的压栈出栈等操作
2)由于函数体代码被移到函数调用处, 编译器可以获得更多的上下文信息 并根据上下文信息对调用者的代码和函数体代码
进行更进一步的优化;
3)若不使用inline函数,程序执行至函数调用处, 需要转而去执行函数体所在位置的代码 一般函数调用位置与函数代码所
在位置在代码段中并不相近, 这样很容易形成操作系统的缺页中断
操作系统需要把缺页地址处的代码从硬盘移入内存, 所需时
间将成数量级增加。 而使用
inline函数则可以减少缺页中断发生的机会。
由于
inline函数在函数调用处插入函数体代码代替函数调用,若该函数在程序的很多位置被调用, 有可能造成内存空间的浪
。 一般函数的压栈出栈操作也需要一定代码, 这段代码完成栈指针调整、参数传递、现场保存和恢复等操作。 若函数的函数体
代码量小于编译器生成的函数压栈出栈代码, 则可以放心地将其定义为
inline。 在这种情况下使用函数体代码替换函数调用代码
反而会减小代码占用的内存空间。 而当函数体代码大于函数压栈出栈代码时, 将函数定义为inline就会增加内存空间的使用, 且函数调用位置越多, 这种内存空间浪费就越多。 但若某个函数在应用程序中被高频度地调用, 已经成为影响程序时间性能的瓶
颈, 则可以牺牲程序的空间性能, 将该函数定义为
inline, 以提高其调用时间性能。C++程序应该根据应用的具体场景, 根据函数体
的大小、调用位置多少、函数调用的频率、应用场景对时间性能的要求、应用场景对内存性能的要求等各方面因素, 合理决定是否

代码。 这样, 程序执行到该函数的调用时,实际上并没有进行调用函数时在函数栈上的进栈出栈等操作, 而是直接执行函数体中
的代码。
inline函数至少在如下三个方面提高了程序的时间性能:
1)避免了函数调用必须执行的压栈出栈等操作
2)由于函数体代码被移到函数调用处, 编译器可以获得更多的上下文信息 并根据上下文信息对调用者的代码和函数体代码
进行更进一步的优化;
3)若不使用inline函数,程序执行至函数调用处, 需要转而去执行函数体所在位置的代码 一般函数调用位置与函数代码所
在位置在代码段中并不相近, 这样很容易形成操作系统的缺页中断
操作系统需要把缺页地址处的代码从硬盘移入内存, 所需时
间将成数量级增加。 而使用
inline函数则可以减少缺页中断发生的机会。
由于
inline函数在函数调用处插入函数体代码代替函数调用,若该函数在程序的很多位置被调用, 有可能造成内存空间的浪
。 一般函数的压栈出栈操作也需要一定代码, 这段代码完成栈指针调整、参数传递、现场保存和恢复等操作。 若函数的函数体
代码量小于编译器生成的函数压栈出栈代码, 则可以放心地将其定义为
inline。 在这种情况下使用函数体代码替换函数调用代码
反而会减小代码占用的内存空间。 而当函数体代码大于函数压栈出栈代码时, 将函数定义为inline就会增加内存空间的使用, 且函数调用位置越多, 这种内存空间浪费就越多。 但若某个函数在应用程序中被高频度地调用, 已经成为影响程序时间性能的瓶
颈, 则可以牺牲程序的空间性能, 将该函数定义为
inline, 以提高其调用时间性能。C++程序应该根据应用的具体场景, 根据函数体
的大小、调用位置多少、函数调用的频率、应用场景对时间性能的要求、应用场景对内存性能的要求等各方面因素, 合理决定是否

定义inline函数。


但是内联函数也有局限性,对函数有诸多限制,复杂函数一般是不能定义为内联函数的。

在使用内联函数时,应注意如下几点:

1.类内定义的函数是内联函数,类外定义的函数是非内联函数(短函数可以 定义在类内,长函数可以定义在类外)。

2.可以为类外定义的函数指定 inline 关键字,强行为内联函数。

3.在内联函数内不允许用循环语句和开关语句

4.内联函数的定义必须出现在内联函数第一次被调用之前。

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2、尽可能减少临时对象

   






//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------


3、尽可能使用初始化列表





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值